zoukankan      html  css  js  c++  java
  • 两个iSeries存储过程的示例

    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; 
     
    END
    只需要定义RESULT SETS 返回个数=几个游标
    定义一个游标 WITH RETURN ---V5R1才有的好像  ,然后指定SELECT语句,
    OPEN即可.
    如果是V5R1一下
    CREATE PROCEDURE GetCusName()
       RESULT SETS 
    1 
       LANGUAGE SQL
    BEGIN
         
    DECLARE c1 CURSOR FOR SELECT cusnam FROM customer ORDER BY 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 变量列表来达到语句的赋值.

  • 相关阅读:
    Linux下安装漏洞扫描工具Nessus
    【译】使用OpenVAS 9进行漏洞扫描
    MD5小彩虹表
    获取某个版本软件存在的漏洞信息
    【译】使用chage来管理Linux密码过期时间的七个例子
    [转]Centos 安装Sublime text 3
    Nessus扫描策略
    Nginx使用笔记
    SSH 公钥登录
    MySQL加密
  • 原文地址:https://www.cnblogs.com/wildfish/p/523538.html
Copyright © 2011-2022 走看看