对于函数与存储过程,其调用方式不同。函数可以通过select or call 方式调用,而存储过程只能通过call 方式调用。以下具体举例说明。
1、创建调用函数和过程
函数:
create or replace function func01 returns integer as
cnt integer;
begin
select count(*) into cnt from t1;
return cnt;
end;
过程:
create or replace procedure proc01 as
cnt integer;
begin
select count(*) into cnt from t1;
exception
when others then
commit;
end;
包:
create or replace package pkg_test as
function func01() return integer;
procedure proc01;
end;
create or replace package body pkg_test as
procedure proc01 as
cnt integer;
begin
select count(*) into cnt from t1;
exception
when others then
commit;
end proc01;
function func01 returns integer as
cnt integer;
begin
select count(*) into cnt from t1;
return cnt;
end func01;
end;
2、具体调用例子
函数调用:可以用select or call
test=# select func01();
func01
--------
0
(1 row)
test=# call func01();
func01
--------
0
(1 row)
test=# call pkg_test.func01();
func01
--------
0
(1 row)
test=# select pkg_test.func01();
func01
--------
0
(1 row)
过程调用:只能用call
test=# call pkg_test.proc01();
CALL
test=# select pkg_test.proc01();
ERROR: pkg_test.proc01() is a procedure
LINE 1: select pkg_test.proc01();
^
HINT: To call a procedure, use CALL.
test=# call proc01();
CALL
test=# select proc01();
ERROR: proc01() is a procedure
LINE 1: select proc01();
^
HINT: To call a procedure, use CALL.
文章通过示例展示了函数和存储过程在SQL中的创建和调用方法。函数可通过selectorcall或call调用,如`func01`、`pkg_test.func01`,而存储过程只能通过call调用,如`pkg_test.proc01`。调用过程中,尝试使用select语句调用过程会引发错误,提示应使用CALL。

658

被折叠的 条评论
为什么被折叠?



