0 0

DB2 SQL Function的一个问题10

SET SCHEMA SCMUSER;

SET CURRENT PATH = "SYSIBM","SYSFUN","SYSPROC","SCMUSER";

CREATE FUNCTION "SCMUSER"."GETBILLNO"
 (
 "STRING" VARCHAR(30),
 "BTYPE" varchar(1)
 ) RETURNS VARCHAR(1000)
  LANGUAGE SQL
  NOT DETERMINISTIC
  CALLED ON NULL INPUT
  EXTERNAL ACTION
  MODIFIES SQL DATA
  INHERIT SPECIAL REGISTERS
BEGIN ATOMIC


	  Declare cd DATE;   --时间
	  DECLARE y VARCHAR(4); --年
	  DECLARE m VARCHAR(2); --月
	  DECLARE d VARCHAR(2); ---日
	  DECLARE LASTDATE DATE;  --上次插入时间
	  DECLARE GSTEP varchar(4); ---
	  DECLARE DIGIT varchar(4);
	  
	  
	  	 set cd = current date;   --得到当前时间
		 set y = char(year(cd));   --得到年
		 set m = char(month(cd));   --得到月
		 
		 if int(m) < 10 then
		 	set m ='0'|| m;
		 end if;
		 
		 set d = char(day(cd));  --得到日
		 
		 if int(d) < 10 then
		 	 set d = '0'||d;
	     end if;
	  
      --查询是否存储当前实例的数据
if not exists(SELECT * from GENERATEBILLNO where SGCODE = STRING and BILLTYPE = BTYPE) then   --如不存在符合条件的记录 		 		 
	  	 insert into GENERATEBILLNO values(STRING,BTYPE,cd,'1');  -- 插入一条记录
		 --取出当前STEP
         
		 set GSTEP = '1';

		 set DIGIT = char(length(GSTEP));   --检查位数
		 
		 if DIGIT = '1' then
		   set  GSTEP = '000'||GSTEP;  -- 不足四位补3个0
		 end if;
		 if DIGIT = '2' then
		   set GSTEP = '00'||GSTEP;
		  end if;
		  if DIGIT = '3' then
		   set GSTEP = '0'||GSTEP;
		  end if;
		  
		  RETURN y||m||d||GSTEP;    ---返回结果
else
 	  set LASTDATE =( select GTIME from GENERATEBILLNO where SGCODE=STRING and BILLTYPE=BTYPE);   -- 得到其时间
	 
	    if year(LASTDATE) = year(cd) and month(LASTDATE) = MONTH(cd) and day(LASTDATE) = day(cd) then   --判断是否与当天时间相等    LASTDATE = current date
	   	   set GSTEP = ( select step from GENERATEBILLNO  where SGCODE = STRING and BILLTYPE=BTYPE);
		   set GSTEP = char(int(GSTEP)+1);
		   update GENERATEBILLNO set STEP = GSTEP where SGCODE = STRING and BILLTYPE=BTYPE;
		else               -- 与不相等
		   set GSTEP = '1';
		   update GENERATEBILLNO set STEP = GSTEP,GTIME = cd where SGCODE = STRING and BILLTYPE=BTYPE;
		end if;
		
		set  DIGIT = char(length(GSTEP));
		 
		 if DIGIT = '1' then
		   set  GSTEP = '000'||GSTEP;
		 end if;
		 if DIGIT = '2' then
		   set GSTEP = '00'||GSTEP;
		  end if;
		  if DIGIT = '3' then
		   set GSTEP = '0'||GSTEP;
		  end if;
		  
		  RETURN y||m||d||GSTEP;
	
	end if;	 
END;

 这个是源SQL Function的代码,报的错是 "存在与MODIFIES SQL DATA 子句有关的多个关键字或相冲突的关键字!"  不知道怎么解决 ...

2010年11月04日 14:47
目前还没有答案

相关推荐

    DB2 SQL 消息

    这意味着DB2无法找到一个与所提供的参数类型相匹配的例程版本。 **原因分析:** 1. **参数类型不匹配:** 调用例程时提供的参数类型与例程定义中的参数类型不符。 2. **例程未授权:** 当前用户没有被授予访问指定...

    DB2 SQL语句性能分析方法

    通过对DB2 UDB的语句事件监测器及其输出结果的深入理解与分析,可以帮助开发人员和DBA们有效地识别并解决SQL语句层面的性能问题。结合自定义的数据转换工具,可以进一步提升数据分析的效率和准确性,最终实现数据库...

    db2 sql手册2

    《DB2 SQL手册第二卷》是一本全面且实用的手册,不仅适合于数据库管理员、应用程序开发者等专业人士,也适合于希望深入学习DB2 UDB SQL语言的学生和自学者。通过本手册的学习,读者可以系统地了解DB2 UDB SQL的各项...

    db2 function 和 procedure

    2. **创建函数**:使用`CREATE FUNCTION`语句来定义一个新的函数。例如,我们可以创建一个简单的函数,计算两个数字的和: ```sql CREATE FUNCTION add_numbers(num1 INT, num2 INT) RETURNS INT LANGUAGE SQL ...

    db2调自定义函数(小例)

    这一步骤告诉DB2数据库系统,你已经创建了一个新的函数,并准备在SQL查询中调用它。注册时,你将指定函数的名称、参数类型和返回类型等信息。 4. **调用函数**:一旦函数被成功注册,你就可以像使用内置函数一样在...

    db2创建加密function.zip

    这里我们讨论的"db2创建加密function"指的是在DB2中定义一个可以对数据进行加密和解密的自定义函数,通常涉及编程语言如Java的集成以及SQL过程语言(PL/SQL)的使用。 首先,`EncryAES.java`可能是一个实现AES...

    SQL FUNCTION Split 字符串分割函数 的创建

    SQL FUNCTION Split 字符串分割函数 的创建,方法加实例

    db2-sql-command.rar_sql command

    1. SELECT:这是最常用的SQL命令,用于从一个或多个表中选择数据。你可以指定列名、使用WHERE子句过滤记录、使用GROUP BY进行分组以及HAVING来进一步过滤分组后的结果。 2. INSERT:用于向表中插入新记录,格式通常...

    How to easily create DB2 user function by DB Query Analyzer 6.03

    DB Query Analyzer 6.03 是一款由马根峰推出的高效数据库查询工具,适用于各种RDBMS产品。这款工具以其强大的功能、用户友好的界面和简单易...对于需要处理多种数据库环境的IT专业人员来说,这无疑是一个宝贵的资源。

    DB2递归实现

    在本文中,我们将使用一个实用的例子来描述如何将CONNECT BY和相关的伪列映射到DB2递归。我们将定义和填充一个雇员表,然后使用递归查询来回答一些问题,例如“谁是‘Goyal’直接或间接的属下?” 首先,我们需要...

    db2创建加密function.zip---废弃

    提供的压缩包文件包含了一个Java源代码文件`EncryAES.java`以及三个与创建加密和解密功能相关的文本文件:`function新建过程.TXT`、`function-encrypt.txt`和`function-decrypt.txt`。 首先,让我们了解一下`...

    ORACLE转DB2对照全解

    `MODE DB2SQL`也是必须的。 ##### 1.3 创建UDF (用户定义函数) **DB2 标量函数的语法:** ```sql CREATE FUNCTION function_name(parameters) RETURNS return_type LANGUAGE SQL READS SQL DATA RETURN statement ...

    DB2常见问题

    - 一个数据库可以在多个数据库服务器上安装,实现数据复制和高可用性。 6. **存储过程的SQL创建** - 自DB2 7.1版本起,可以使用SQL语句创建存储过程。 7. **DB2关系扩展器** - **文本扩展器 (TEXTEXTENDER)**:...

    IBM DB2通用数据库SQL入门.pdf

    **存储过程**是一组预编译好的SQL语句集合,可以作为一个单元被调用,从而实现复杂业务逻辑的封装。 ##### &gt;}}] 这可能是关于游标(Cursor)的介绍。**游标**允许程序逐行地读取查询结果集,从而可以更加灵活地处理...

    使用db2top和db2advis生成索引建议

    以上输出显示`db2top`正在创建一个名为`db2snap-mydb-AIX64.bin`的文件来存储快照数据。随着时间的推移,文件中的数据量会逐渐增加。 #### 分析快照数据 收集完快照数据后,下一步就是利用`db2top`工具分析这些...

    db2数据库入门教程(官方中文版)

    实验 #2 - 创建一个新的数据库............................................................................................43 4.1 DB2配置....................................................................

    oracle转DB2 对照

    CREATE TRIGGER connect_audit_trg NO CASCADE BEFORE INSERT ON connect_audit REFERRING NEW AS n FOR EACH ROW MODE DB2SQL BEGIN ATOMIC SET n.timestamp = CURRENT_TIMESTAMP; END ``` - 注意点: 在DB2中,...

Global site tag (gtag.js) - Google Analytics