Oracle 執行儲存過程有 EXEC 與 CALL 兩種方式,適用環境與語法規則不同。本文釐清兩者差異,避免跨工具調用報錯。
| 特性 | EXEC / EXECUTE | CALL |
|---|---|---|
| 性質 | SQL*Plus 專屬命令 | SQL 標準指令 |
| 適用工具 | 僅 SQL*Plus | 所有工具(PL/SQL Dev、JDBC、SQLcl 等) |
| 括號要求 | 可省略 | 強制需括號 () |
| 函數調用 | 不可直接調用函數 | 可調用函數(需 INTO :bind) |
-- 在 SQL*Plus SQL> CREATE PROCEDURE p_test AS BEGIN NULL; END; / Procedure created. SQL> EXEC p_test; -- 成功 PL/SQL procedure successfully completed. SQL> CALL p_test; -- 失敗 ORA-06576: not a valid function or procedure name SQL> CALL p_test(); -- 成功 Call completed. -- 在 PL/SQL Developer / JDBC -- EXEC p_test; -- 報錯:未知命令 -- CALL p_test(); -- 成功
-- EXEC 完整形式 EXECUTE procedure_name[(arg1, arg2, ...)]; -- CALL 完整形式 CALL procedure_name[(arg1, arg2, ...)] [INTO :host_variable];
EXEC,簡短直觀CALL,保證可移植性CALL func() INTO :var 或 SELECT func() FROM dualCALL proc(); 括號不可省CallableStatement 使用 {call proc()} 語法(標準 CALL 形式)EXEC 改為 CALLEXEC 報「無效命令」記住:EXEC 是工具命令,CALL 是 SQL 指令,選對場合零失誤。