在sqlplus中這兩種方法都可以使用:
exec pro_name(參數1..); call pro_name(參數1..);
區別:
1. 但是exec是sqlplus命令,只能在sqlplus中使用;call為SQL命令,沒有限制.
2. 存儲過程沒有參數時,exec可以直接跟過程名(可以省略()),但call則必須帶上().
Sql代碼
SQL> --創建過程 插入數據
SQL> create or replace procedure pro1 is
2 begin --執行部分
3 insert into mytest values('張三', 'mm');
4 end;
5 /
Procedure created
SQL> exec pro1;
PL/SQL procedure successfully completed
SQL> call pro1;
call pro1
ORA-06576: 不是有效的函數或過程名
SQL> call pro1();
Method called
總結:在調用過程時,應該養成使用call,且要帶上()的習慣。
---------------------
exec是sqlplus的命令,只能在sqlplus中使用。
call是sql命令,任何工具都可以使用,call必須有括號,即例沒有參數
call必須有括號,即例沒有參數 idle> connect /as sysdba 已連接。 sys@PO10> sys@PO10> create procedure p_test is 2 begin 3 null; 4 end; 5 / 過程已創建。 sys@PO10> sys@PO10> exec p_test PL/SQL 過程已成功完成。 sys@PO10> call p_test 2 ; call p_test * 第 1 行出現錯誤: ORA-06576: 不是有效的函數或過程名 sys@PO10> call p_test(); 調用完成。 sys@PO10> exec 只能在SQLPLUS中使用;call可以在任何地方使用
區別
exec是SQL Plus命令,只能在SQL Plus中使用;call為SQL命令,沒有限制.
存儲過程或函數沒有參數時,exec可以直接跟過程名(可以省略()),但call則必須帶上().
示例
exec
調用存儲過程
有參數:exec mypro(12,'fsdf');
沒有參數:exec mypro;,也可以寫成exec mypro();
調用函數
有參數:var counts number;exec :counts:=myfunc('fsde');
沒有參數:var counts number;exec :counts:=myfunc;,也可以寫成var counts number;exec :counts:=myfunc();
call
調用存儲過程
有參數:call mypro(23,'fth');
無參數:call mypro();
調用函數
有參數:var counts number;call myfunc('asd') into :counts;
無參數:var counts number;call myfunc() into :counts;
其他注意事項
oracle 中字符串應該是 ” 而不應該是 “”
每寫完一條sql語句應加上 ;
為了防止call 和 exec 無參數的存儲過程或函數的錯誤,建議全部加上()
---------------------