Oracle存储过程应用实例 ---- 调用


1. 执行存过的关键字(call和exec的区别)

在sqlplus中这两种方法都可以使用:
exec pro_name(参数1..);
call pro_name(参数1..);

区别:

  1. 但是exec是sqlplus命令,只能在sqlplus中使用;call为SQL命令,没有限制.
  2. 存储过程没有参数时,exec可以直接跟过程名(可以省略()),但call则必须带上().

2. 循环调用存过

这里将select语句查询出的结果列表作为存过的入参

DECLARE
  cursor CUR_PLY_NO is
    SELECT C_PLY_NO FROM ZSSYS.WEB_GBDJ_INFO_SUB;
BEGIN

  FOR LR_PLY_NO IN CUR_PLY_NO LOOP
    PK_TOOL.P_IMPORT_OL_DATA(LR_PLY_NO.C_PLY_NO);
    COMMIT;
  END LOOP;
END;

3. 循环调用存过,且存储过程名为变量调用???

DECLARE
  VSQL   VARCHAR2(200);
  I_PROC USER_TABLES.TABLE_NAME%TYPE;
  CURSOR YB IS
    SELECT OBJECT_NAME
      FROM USER_PROCEDURES
     WHERE OBJECT_NAME LIKE 'PROC%'
       AND OBJECT_NAME NOT LIKE 'PROC_ERR_LOG%'
       AND OBJECT_NAME NOT LIKE 'PROC_TAB%';
BEGIN
  I_PROC := 'PROC_FMS_ACCENTRY2_HL';
  OPEN YB;
  LOOP
    FETCH YB
      INTO I_PROC;
    EXIT WHEN YB%NOTFOUND;
    VSQL := 'BEGIN ' || I_PROC || '(DATE''2018-03-01''); END;';
    EXECUTE IMMEDIATE VSQL;
  END LOOP;
END;


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM