阅 读 文 章

两个iSeries存储过程的示例

[来源:网上转载 (http://www.chinaunix.net) | 作者:网友(wildfish) | 时间:2007-05-27 | 浏览:人次 ]


1.外部存储过程--觉得这个比较好,可以挽救封装的比较好的RPG或者CL程序.效率上也是很显著的,
   毕竟是Direct IO
   绑定CL的,比较简单,SQLRPG的还没搞定,有知道的人告诉我,因为我已经根据参数设定DS,结果还是不行.
 
CREATE PROCEDURE EMPLIB.SP_EQCHKLN(
   IN CKDATE CHAR(8),
   IN CKDEPT CHAR(2),
   IN CKUSRNM CHAR(10) )
RESULT SET 0
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存储过程-使用参数形式,预编译
CREATE PROCEDURE 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 CURSOR WITH RETURN FOR S1 ; 
   SET SQLSTRING = 'SELECT * FROM EMFLIB.EQCHKTXPF  WHERE EQCHKDT=? AND EQDEPT=? ' ; 
   IF TRIM ( CKUSRNM ) <> '' THEN 
   SET SQLSTRING = SQLSTRING || ' AND EQOPRT=? ' ; 
   END IF ; 
   PREPARE S1 FROM SQLSTRING ;   
 IF TRIM ( CKUSRNM ) <> '' THEN 
 OPEN C1 USING CKDATE , CKDEPT , CKUSRNM ; 
 ELSE 
 OPEN C1 USING CKDATE , CKDEPT ; 
 END IF ; 
 END  

这是一个标准的存储过程,如果说是SQL语句是固定的化,那么最简单了.
CREATE PROCEDURE GetCusName()
   RESULT SETS 1 
   LANGUAGE SQL
BEGIN
     DECLARE c1 CURSOR WITH RETURN FOR 
     SELECT cusnam FROM customer ORDER BY cusnam; 
     OPEN c1; 
论坛热门帖子: [lch203] 写得蛮好的linux学习笔记(10-21)
[黑马制造] 学习java的30个目标(10-19)
[笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19)
[udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18)
[沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18)
TAG标签: 过程 存储 两个 参数 比较 语句 使用 程序 如果 可以

最新评论 共有0位网友发表了评论

发表评论

评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名:(注册)
密码:
验证码:
匿名发表

网站地图友情连接交流论坛网站投稿广告服务联系我们留言本站长统计
Some rights reserved: www.chmhome.com, 鄂ICP备07010232号 E-mail:chinakafei@live.com,QQ:552766
中国咖啡技术网(Chmhome):国外编程技术书籍,中文编程手册,经典编程文章,交流技术,技术软件下载,计算机论文,毕业论文.