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