1. 执行存过的关键字(call和exec的区别)
在sqlplus中这两种方法都可以使用:
exec pro_name(参数1..);
call pro_name(参数1..);
区别:
- 但是exec是sqlplus命令,只能在sqlplus中使用;call为SQL命令,没有限制.
- 存储过程没有参数时,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;