首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle CALL 與 EXEC 差異詳解:SQL*Plus 命令 vs SQL 標準指令

     編輯:Oracle 資料庫相關知識

Oracle 執行儲存過程有 EXEC 與 CALL 兩種方式,適用環境與語法規則不同。本文釐清兩者差異,避免跨工具調用報錯。

核心差異

特性EXEC / EXECUTECALL
性質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];

最佳實踐

  1. SQL*Plus 互動模式:習慣用 EXEC,簡短直觀
  2. 腳本/應用程式/第三方工具:統一用 CALL,保證可移植性
  3. 調用函數:必須用 CALL func() INTO :var 或 SELECT func() FROM dual
  4. 無參過程:CALL proc(); 括號不可省

常見錯誤場景

  • JDBC CallableStatement 使用 {call proc()} 語法(標準 CALL 形式)
  • 遷移腳本從 SQL*Plus 到 Python cx_Oracle,忘記把 EXEC 改為 CALL
  • PL/SQL Developer 執行 EXEC 報「無效命令」

記住:EXEC 是工具命令,CALL 是 SQL 指令,選對場合零失誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved