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;
posted @ 2020-04-07 14:48  雨 燕  阅读(743)  评论(0编辑  收藏  举报