VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

CALL

功能描述

使用CALL命令可以调用已定义的函数和存储过程。在MySQL兼容模式下,针对使用了out、inout 类型参数的存储过程,在使用call语法调用时,允许使用变量对应作为out、inout类型的参数。

语法格式

CALL sp_name([parameter[,...]])

参数说明

  • sp_name

    存储过程名称。

    取值范围:字符串,要符合标识符的命名规范。

  • parameter

    参数名称。

注意事项

MySQL使用临时变量,可以比较方便的使用@变量名的方式来定义一个临时变量。

示例

1、创建兼容MySQL的库my_test ,并进入。

CREATE DATABASE my_test DBCOMPATIBILITY 'B';
\c my_test
show sql_compatibility;

查看兼容性结果为:

 sql_compatibility
-------------------
B
(1 row)

2、创建测试表time_table,并插入测试数据。

create table time_table8(id int,c1 char(8),c3 varchar(16));
insert into time_table8 values(1,'xx','xx');
insert into time_table8 values(2,'yy','yy');
insert into time_table8 values(3,'zz','zz');
insert into time_table8 values(4,'ss','ss');

3、创建存储过程。

CREATE OR REPLACE PROCEDURE pro_call_1093754(n int,a1 in char(8),a2 out int,a3 inout varchar(16))
AS
BEGIN
for i in 1..n loop
a3:=a3||i;
insert into time_table8 values(4+i,a1,a3);
end loop;
select count(*) into a2 from time_table8;
END;
/

4、调用存储过程。

call pro_call_1093754(3,'dd',5,'ll');

结果返回如下:

 a2 |  a3
----+-------
  7 | ll123
(1 row)

5、查询表中数据。

select * from time_table8 order by id;

结果返回如下:

 id |    c1    |  c3
----+----------+-------
  1 | xx       | xx
  2 | yy       | yy
  3 | zz       | zz
  4 | ss       | ss
  5 | dd       | ll1
  6 | dd       | ll12
  7 | dd       | ll123
(7 rows)

6、创建存储过程调用,参数赋值。

create or replace procedure pro1_call_1093754()
as
b1 char(8);
b2 int;
b3 varchar(16);
begin
b1:='oo';
b2:=3;
b3:='pp';
call pro_call_1093754(2,b1,b2,b3);
end;
/

7、调用存储过程pro1_call_1093754()。

call pro1_call_1093754();

8、查询表中数据

select * from time_table8 order by id;

结果返回如下,存储过程调用成功。

 id |    c1    |  c3
----+----------+-------
  1 | xx       | xx
  2 | yy       | yy
  3 | zz       | zz
  4 | ss       | ss
  5 | dd       | ll1
  5 | oo       | pp1
  6 | oo       | pp12
  6 | dd       | ll12
  7 | dd       | ll123
(9 rows)