在SQL中可以调用自定义函数,但是不能够调用存储过程。SQL中调用自定义函数有一定的限制,如果是查询语句,则不可有DML操作,除非使用匿名事务AT。当然,在UPDATE,DELETE中使用的自定义函数可以带DML操作。
如何用SQL调用存储过程呢?因为SQL只能调用自定义函数,但是自定义函数可以调用存储过程,因此,可以SQL----调用FUNCTION---调用PROCEDURE来间接实现SQL调用函数。如下例:
SQL> CREATE OR REPLACE PROCEDURE test_prc(var1 IN number,var2 OUT NUMBER) 2 AS 3 BEGIN 4 var2 := var1+1; 5 END; 6 / Procedure created SQL> SQL> CREATE OR REPLACE FUNCTION test_func(var1 IN NUMBER) 2 RETURN NUMBER 3 AS 4 var2 NUMBER; 5 BEGIN 6 test_prc(var1,var2); 7 RETURN var2; 8 END; 9 / Function created SQL> SELECT test_func(1) FROM dual; TEST_FUNC(1) ------------ 2 |
在程序编写过程中,如果直接不行,就需要用间接手段,SQL调用存储过程,使用自定义FUNCTION作为媒介,从而很容易实现这个功能。