CREATEPROCEDURE EMPLIB.SP_EQCHKLN( IN CKDATE CHAR(8), IN CKDEPT CHAR(2), IN CKUSRNM CHAR(10) ) RESULT SET0 EXTERNAL NAME EMPLIB.EQCHKLNCL LANGUAGE CL PARAMETER STYLE GENERAL
解说: 标准语法CREATE PROCEDURE 库名.存储过程名 参数有 IN OUT INOUT三种类型 参数类型是常规的--可能是DB2默认的,不是太清楚. 指定外部程序名 EMPLIB.EQCHKLNCL--参数3个,也是CKDATE CKDEPT USRNM 指定外部程序使用的语言.:) 简单吧,只需要把CL稍微封装,我们就可以调用服务器的程序. 或者使用CALL 的方式,但是比较麻烦,个人觉得使用这种方式比较好.
2.SQL存储过程-使用参数形式,预编译
CREATEPROCEDURE EMPLIB.SP_GETCHKTX ( IN CKDATE CHAR(8) , IN CKDEPT CHAR(2) , IN CKUSRNM CHAR(10) ) RESULT SETS 1 LANGUAGE SQL SPECIFIC EMPLIB.SP_GETCHKTX READS SQL DATA BEGIN DECLARE SQLSTRING VARCHAR ( 200 ) ; DECLARE C1 CURSORWITHRETURNFOR S1 ; SET SQLSTRING ='SELECT * FROM EMFLIB.EQCHKTXPF WHERE EQCHKDT=? AND EQDEPT=? ' ; IF TRIM ( CKUSRNM ) <>''THEN SET SQLSTRING = SQLSTRING ||' AND EQOPRT=? ' ; ENDIF ; PREPARE S1 FROM SQLSTRING ; IF TRIM ( CKUSRNM ) <>''THEN OPEN C1 USING CKDATE , CKDEPT , CKUSRNM ; ELSE OPEN C1 USING CKDATE , CKDEPT ; ENDIF ; END
这是一个标准的存储过程,如果说是SQL语句是固定的化,那么最简单了.
CREATEPROCEDURE GetCusName() RESULT SETS 1 LANGUAGE SQL BEGIN DECLARE c1 CURSORWITHRETURNFOR SELECT cusnam FROM customer ORDERBY cusnam; OPEN c1; END
只需要定义RESULT SETS 返回个数=几个游标 定义一个游标 WITH RETURN ---V5R1才有的好像 ,然后指定SELECT语句, OPEN即可. 如果是V5R1一下
CREATEPROCEDURE GetCusName() RESULT SETS 1 LANGUAGE SQL BEGIN DECLARE c1 CURSORFORSELECT cusnam FROM customer ORDERBY cusnam; OPEN c1; SET RESULT SETS CURSOR c1; END;
得手动的SET ,如果多个RESULT SET,必须SET RESULT SETS CURSOR C1,C2,C3....;的方式设置返回.
如果SQL语句不固定,那么可以预先PREPARE一个,然后设置sql语句--使用参数式比较方便. (参数用?作为占位符),然后PRAPARE 这个sql语句,最后OPEN 游标 USING 变量列表来达到语句的赋值.