函数与存储过程调用方式的区别

对于函数与存储过程,其调用方式不同。函数可以通过select or call 方式调用,而存储过程只能通过call 方式调用。以下具体举例说明。

1、创建调用函数和过程

函数:

1
2
3
4
5
6
create or replace function func01 returns integer as
  cnt integer;
begin
  select count(*) into cnt from t1;
  return cnt;                               
end;

 

过程:

1
2
3
4
5
6
7
8
create or replace procedure proc01 as
  cnt integer;
begin
  select count(*) into cnt from t1;
exception
  when others then
     commit;                                        
end;

  

包:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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.

  

posted @   KINGBASE研究院  阅读(277)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2022-01-12 KingbaseES V8R6 集群运维系列 -- 读写分离集群修改ssh端口
2022-01-12 Kingbase V8R6 集群运维系列 -- 在线删除standby节点
点击右上角即可分享
微信分享提示