Files
openGauss-server/src/test/regress/expected/out_param_func.out

1232 lines
25 KiB
Plaintext

create schema out_param_schema;
set current_schema= out_param_schema;
set behavior_compat_options='proc_outparam_override';
--1--------return 变量
CREATE or replace FUNCTION func1(in a integer, out b integer)
RETURNS int
AS $$
DECLARE
c int;
BEGIN
c := 1;
b := a + c;
return c;
END; $$
LANGUAGE 'plpgsql' NOT FENCED;
select func1(2, null);
func1
-------
1
(1 row)
call func1(2, NULL);
func1 | b
-------+---
1 | 3
(1 row)
select * from func1(2,null);
func1 | b
-------+---
1 | 3
(1 row)
select func1(a => 2, b => null);
func1
-------
1
(1 row)
select * from func1(a => 2, b => null);
func1 | b
-------+---
1 | 3
(1 row)
declare
result integer;
a integer := 2;
b integer := NULL;
begin
result := func1(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: 1
declare
result integer;
a integer := 2;
b integer := NULL;
begin
select * into result from func1(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: <NULL>
INFO: result is: 1
declare
result integer;
a integer := 2;
b integer := NULL;
begin
result := func1(a, b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: 1
declare
result integer;
a integer := 2;
b integer := NULL;
begin
func1(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: <NULL>
declare
result text;
a integer := 2;
b integer := NULL;
begin
func1(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: <NULL>
---inout参数
CREATE or replace FUNCTION func1_1(in a integer, inout b integer)
RETURNS int
AS $$
DECLARE
c int;
BEGIN
c := 1;
b := a + c;
return c;
END; $$
LANGUAGE 'plpgsql' NOT FENCED;
select func1_1(2, null);
func1_1
---------
1
(1 row)
call func1_1(2, NULL);
func1_1 | b
---------+---
1 | 3
(1 row)
select * from func1_1(2,null);
func1_1 | b
---------+---
1 | 3
(1 row)
declare
result integer;
a integer := 2;
b integer := NULL;
begin
result := func1_1(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: 1
declare
result integer;
a integer := 2;
b integer := NULL;
begin
result := func1_1(a, b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: 1
declare
result integer;
a integer := 2;
b integer := NULL;
begin
func1_1(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: <NULL>
declare
result text;
a integer := 2;
b integer := NULL;
begin
func1_1(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: <NULL>
--2--------return 变量运算
CREATE or replace FUNCTION func2(in a integer, out b integer)
RETURNS int
AS $$
DECLARE
c int;
BEGIN
c := 1;
b := a + c;
return b + c;
END; $$
LANGUAGE 'plpgsql' NOT FENCED;
select func2(2, null);
func2
-------
4
(1 row)
call func2(2, NULL);
func2 | b
-------+---
4 | 3
(1 row)
select * from func2(2,null);
func2 | b
-------+---
4 | 3
(1 row)
declare
result integer;
a integer := 2;
b integer := NULL;
begin
result := func2(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: 4
declare
result integer;
a integer := 2;
b integer := NULL;
begin
result := func2(a, b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: 4
declare
result integer;
a integer := 2;
b integer := NULL;
begin
func2(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: <NULL>
declare
result text;
a integer := 2;
b integer := NULL;
begin
func2(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: <NULL>
--3------return 常量
CREATE or replace FUNCTION func3(in a integer, out b integer)
RETURNS int
AS $$
DECLARE
c int;
BEGIN
c := 1;
b := a + c;
return 123;
END; $$
LANGUAGE 'plpgsql' NOT FENCED;
select func3(2, null);
func3
-------
123
(1 row)
call func3(2, NULL);
func3 | b
-------+---
123 | 3
(1 row)
select * from func3(2,null);
func3 | b
-------+---
123 | 3
(1 row)
declare
result integer;
a integer := 2;
b integer := NULL;
begin
result := func3(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: 123
declare
result integer;
a integer := 2;
b integer := NULL;
begin
result := func3(a, b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: 123
declare
result integer;
a integer := 2;
b integer := NULL;
begin
func3(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: <NULL>
declare
result text;
a integer := 2;
b integer := NULL;
begin
func3(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: <NULL>
--4------多out
CREATE or replace FUNCTION func4(in a integer, out b integer, out d integer)
RETURNS int
AS $$
DECLARE
c int;
BEGIN
c := 1;
b := a + c;
d := a + c;
return c;
END; $$
LANGUAGE 'plpgsql' NOT FENCED;
select func4(2,NULL,NULL);
func4
-------
1
(1 row)
call func4(2, NULL,NULL);
func4 | b | d
-------+---+---
1 | 3 | 3
(1 row)
select * from func4(2, NULL,NULL);
func4 | b | d
-------+---+---
1 | 3 | 3
(1 row)
declare
result integer;
a integer := 2;
b integer := NULL;
d integer := NULL;
begin
result := func4(a => a, b => b,d => d);
raise info 'b is: %', b;
raise info 'd is: %', d;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: d is: 3
INFO: result is: 1
declare
result integer;
a integer := 2;
b integer := NULL;
d integer := NULL;
begin
result := func4(a, b, d);
raise info 'b is: %', b;
raise info 'd is: %', d;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: d is: 3
INFO: result is: 1
declare
result integer;
a integer := 2;
b integer := NULL;
d integer := NULL;
begin
func4(a => a, b => b,d => d);
raise info 'b is: %', b;
raise info 'd is: %', d;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: d is: 3
INFO: result is: <NULL>
declare
result integer;
a integer := 2;
b integer := NULL;
d integer := NULL;
begin
func4(a => a, b => b,d => d);
raise info 'b is: %', b;
raise info 'd is: %', d;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: d is: 3
INFO: result is: <NULL>
---inout参数
CREATE or replace FUNCTION func4_1(in a integer, inout b integer, inout d integer)
RETURNS int
AS $$
DECLARE
c int;
BEGIN
c := 1;
b := a + c;
d := a + c;
return c;
END; $$
LANGUAGE 'plpgsql' NOT FENCED;
select func4_1(2,NULL,NULL);
func4_1
---------
1
(1 row)
call func4_1(2, NULL,NULL);
func4_1 | b | d
---------+---+---
1 | 3 | 3
(1 row)
select * from func4_1(2, NULL,NULL);
func4_1 | b | d
---------+---+---
1 | 3 | 3
(1 row)
declare
result integer;
a integer := 2;
b integer := NULL;
d integer := NULL;
begin
result := func4_1(a => a, b => b,d => d);
raise info 'b is: %', b;
raise info 'd is: %', d;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: d is: 3
INFO: result is: 1
declare
result integer;
a integer := 2;
b integer := NULL;
d integer := NULL;
begin
result := func4_1(a, b, d);
raise info 'b is: %', b;
raise info 'd is: %', d;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: d is: 3
INFO: result is: 1
declare
result integer;
a integer := 2;
b integer := NULL;
d integer := NULL;
begin
func4_1(a => a, b => b,d => d);
raise info 'b is: %', b;
raise info 'd is: %', d;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: d is: 3
INFO: result is: <NULL>
declare
result integer;
a integer := 2;
b integer := NULL;
d integer := NULL;
begin
func4_1(a => a, b => b,d => d);
raise info 'b is: %', b;
raise info 'd is: %', d;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: d is: 3
INFO: result is: <NULL>
--5-- 有out+ 无return 不支持,在执行时报错--
--5.1
CREATE or replace FUNCTION func5_1(in a integer, out b integer)
RETURNS int
AS $$
DECLARE
c int;
BEGIN
c := 1;
b := a + c;
--return;
END; $$
LANGUAGE 'plpgsql' NOT FENCED;
select func5_1(2, NULL);
ERROR: Value assignment for the out parameter in plpgsql language functions, Unsupported return nothing in PL/pgSQL function
DETAIL: N/A
CONTEXT: PL/pgSQL function func5_1(integer) line 0 at RETURN
referenced column: func5_1
call func5_1(2, NULL);
ERROR: Value assignment for the out parameter in plpgsql language functions, Unsupported return nothing in PL/pgSQL function
DETAIL: N/A
CONTEXT: PL/pgSQL function func5_1(integer) line 0 at RETURN
select * from func5_1(2, NULL);
ERROR: Value assignment for the out parameter in plpgsql language functions, Unsupported return nothing in PL/pgSQL function
DETAIL: N/A
CONTEXT: PL/pgSQL function func5_1(integer) line 0 at RETURN
declare
result integer;
a integer := 2;
b integer := NULL;
begin
result := func5_1(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
ERROR: Value assignment for the out parameter in plpgsql language functions, Unsupported return nothing in PL/pgSQL function
DETAIL: N/A
CONTEXT: PL/pgSQL function func5_1(integer) line 0 at RETURN
SQL statement "CALL func5_1(a => a,b=>b)"
PL/pgSQL function inline_code_block line 5 at assignment
declare
result integer;
a integer := 2;
b integer := NULL;
begin
result := func5_1(a, b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
ERROR: Value assignment for the out parameter in plpgsql language functions, Unsupported return nothing in PL/pgSQL function
DETAIL: N/A
CONTEXT: PL/pgSQL function func5_1(integer) line 0 at RETURN
SQL statement "CALL func5_1(a,b)"
PL/pgSQL function inline_code_block line 5 at assignment
declare
result integer;
a integer := 2;
b integer := NULL;
begin
func5_1(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
ERROR: Value assignment for the out parameter in plpgsql language functions, Unsupported return nothing in PL/pgSQL function
DETAIL: N/A
CONTEXT: PL/pgSQL function func5_1(integer) line 0 at RETURN
SQL statement "CALL func5_1(a => a,b=>b)"
PL/pgSQL function inline_code_block line 5 at SQL statement
--5.2
CREATE or replace FUNCTION func5_2(in a integer, out b integer)
RETURNS int
AS $$
DECLARE
c int;
BEGIN
c := 1;
b := a + c;
return;
END; $$
LANGUAGE 'plpgsql' NOT FENCED;
select func5_2(2, NULL);
ERROR: Value assignment for the out parameter in plpgsql language functions, Unsupported return nothing in PL/pgSQL function
DETAIL: N/A
CONTEXT: PL/pgSQL function func5_2(integer) line 7 at RETURN
referenced column: func5_2
call func5_2(2, NULL);
ERROR: Value assignment for the out parameter in plpgsql language functions, Unsupported return nothing in PL/pgSQL function
DETAIL: N/A
CONTEXT: PL/pgSQL function func5_2(integer) line 7 at RETURN
select * from func5_2(2, NULL);
ERROR: Value assignment for the out parameter in plpgsql language functions, Unsupported return nothing in PL/pgSQL function
DETAIL: N/A
CONTEXT: PL/pgSQL function func5_2(integer) line 7 at RETURN
declare
result integer;
a integer := 2;
b integer := NULL;
begin
result := func5_2(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
ERROR: Value assignment for the out parameter in plpgsql language functions, Unsupported return nothing in PL/pgSQL function
DETAIL: N/A
CONTEXT: PL/pgSQL function func5_2(integer) line 7 at RETURN
SQL statement "CALL func5_2(a => a,b=>b)"
PL/pgSQL function inline_code_block line 5 at assignment
declare
result integer;
a integer := 2;
b integer := NULL;
begin
result := func5_2(a, b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
ERROR: Value assignment for the out parameter in plpgsql language functions, Unsupported return nothing in PL/pgSQL function
DETAIL: N/A
CONTEXT: PL/pgSQL function func5_2(integer) line 7 at RETURN
SQL statement "CALL func5_2(a,b)"
PL/pgSQL function inline_code_block line 5 at assignment
declare
result integer;
a integer := 2;
b integer := NULL;
begin
func5_2(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
ERROR: Value assignment for the out parameter in plpgsql language functions, Unsupported return nothing in PL/pgSQL function
DETAIL: N/A
CONTEXT: PL/pgSQL function func5_2(integer) line 7 at RETURN
SQL statement "CALL func5_2(a => a,b=>b)"
PL/pgSQL function inline_code_block line 5 at SQL statement
--6自治事务
--6.1 单out
CREATE or replace FUNCTION func6_1(in a integer, out b integer)
RETURNS int
AS $$
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
c int;
BEGIN
c := 1;
b := a + c;
return c;
END; $$
LANGUAGE 'plpgsql' NOT FENCED;
select func6_1(2, null);
func6_1
---------
1
(1 row)
call func6_1(2, NULL);
func6_1 | b
---------+---
1 | 3
(1 row)
select * from func6_1(2,null);
func6_1 | b
---------+---
1 | 3
(1 row)
declare
result integer;
a integer := 2;
b integer := NULL;
begin
result := func6_1(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: 1
declare
result integer;
a integer := 2;
b integer := NULL;
begin
result := func6_1(a, b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: 1
declare
result integer;
a integer := 2;
b integer := NULL;
begin
func6_1(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: <NULL>
declare
result text;
a integer := 2;
b integer := NULL;
begin
func6_1(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: <NULL>
--6.2 多out
CREATE or replace FUNCTION func6_2(in a integer, out b integer, out d integer)
RETURNS int
AS $$
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
c int;
BEGIN
c := 1;
b := a + c;
d := a + c;
return c;
END; $$
LANGUAGE 'plpgsql' NOT FENCED;
select func6_2(2,NULL,NULL);
func6_2
---------
1
(1 row)
call func6_2(2, NULL,NULL);
func6_2 | b | d
---------+---+---
1 | 3 | 3
(1 row)
select * from func6_2(2, NULL,NULL);
func6_2 | b | d
---------+---+---
1 | 3 | 3
(1 row)
declare
result integer;
a integer := 2;
b integer := NULL;
d integer := NULL;
begin
result := func6_2(a => a, b => b,d => d);
raise info 'b is: %', b;
raise info 'd is: %', d;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: d is: 3
INFO: result is: 1
declare
result integer;
a integer := 2;
b integer := NULL;
d integer := NULL;
begin
result := func6_2(a, b,d);
raise info 'b is: %', b;
raise info 'd is: %', d;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: d is: 3
INFO: result is: 1
declare
result integer;
a integer := 2;
b integer := NULL;
d integer := NULL;
begin
func6_2(a => a, b => b,d => d);
raise info 'b is: %', b;
raise info 'd is: %', d;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: d is: 3
INFO: result is: <NULL>
declare
result integer;
a integer := 2;
b integer := NULL;
d integer := NULL;
begin
func6_2(a => a, b => b,d => d);
raise info 'b is: %', b;
raise info 'd is: %', d;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: d is: 3
INFO: result is: <NULL>
--7 packge
--7.1普通out出参
create or replace package pck7_1
is
function func7_1(in a int, out b int)
return int;
end pck7_1;
/
CREATE or replace package body pck7_1 as FUNCTION func7_1(in a int, out b integer)
RETURN int
AS
DECLARE
--PRAGMA AUTONOMOUS_TRANSACTION;
c int;
BEGIN
c := 1;
b := a + c;
return c;
END;
end pck7_1;
/
select pck7_1.func7_1(2, null);
func7_1
---------
1
(1 row)
call pck7_1.func7_1(2, NULL);
func7_1 | b
---------+---
1 | 3
(1 row)
select * from pck7_1.func7_1(2,null);
func7_1 | b
---------+---
1 | 3
(1 row)
declare
result integer;
a integer := 2;
b integer := NULL;
begin
result := pck7_1.func7_1(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: 1
declare
result integer;
a integer := 2;
b integer := NULL;
begin
result := pck7_1.func7_1(a, b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: 1
declare
result integer;
a integer := 2;
b integer := NULL;
begin
pck7_1.func7_1(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: <NULL>
declare
result text;
a integer := 2;
b integer := NULL;
begin
pck7_1.func7_1(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: <NULL>
--7.2带自治事务out出参
create or replace package pck7_2
is
function func7_2(in a int, out b int)
return int;
end pck7_2;
/
CREATE or replace package body pck7_2 as FUNCTION func7_2(in a int, out b integer)
RETURN int
AS
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
c int;
BEGIN
c := 1;
b := a + c;
return c;
END;
end pck7_2;
/
select pck7_2.func7_2(2, null);
func7_2
---------
1
(1 row)
call pck7_2.func7_2(2, NULL);
func7_2 | b
---------+---
1 | 3
(1 row)
select * from pck7_2.func7_2(2,null);
func7_2 | b
---------+---
1 | 3
(1 row)
declare
result integer;
a integer := 2;
b integer := NULL;
begin
result := pck7_2.func7_2(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: 1
declare
result integer;
a integer := 2;
b integer := NULL;
begin
result := pck7_2.func7_2(a, b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: 1
declare
result integer;
a integer := 2;
b integer := NULL;
begin
pck7_2.func7_2(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: <NULL>
declare
result text;
a integer := 2;
b integer := NULL;
begin
pck7_2.func7_2(a => a, b => b);
raise info 'b is: %', b;
raise info 'result is: %', result;
end;
/
INFO: b is: 3
INFO: result is: <NULL>
--8 out出参不允许重载限制
--8.1 plpgsql语言的带out参数同名函数只能存在一个
CREATE or replace FUNCTION func8_1(in a integer)
RETURNS int
AS $$
DECLARE
b int;
c int;
BEGIN
c := 1;
b := a + c;
return c;
END; $$
LANGUAGE 'plpgsql' NOT FENCED;
CREATE or replace FUNCTION func8_1(in a integer, out b integer)
RETURNS int
AS $$
DECLARE
c int;
BEGIN
c := 1;
b := a + c;
return c;
END; $$
LANGUAGE 'plpgsql' NOT FENCED;
CREATE or replace FUNCTION func8_1(in a integer, out b integer, out d integer)
RETURNS int
AS $$
DECLARE
c int;
BEGIN
c := 1;
b := a + c;
d := b;
return c;
END; $$
LANGUAGE 'plpgsql' NOT FENCED;
ERROR: "func8_1" functions with plpgsql language and out params are not supported Overloaded.
DETAIL: N/A.
--8.2 同一schema、package下,不允许存在同名的plpgsql语言的out出参函数,但可以replace
CREATE or replace FUNCTION func8_2(in a integer, out b integer)
RETURNS int
AS $$
DECLARE
c int;
BEGIN
c := 1;
b := a + c;
return c;
END; $$
LANGUAGE 'plpgsql' NOT FENCED;
CREATE or replace FUNCTION func8_2(in a integer, out b integer, out d integer)
RETURNS int
AS $$
DECLARE
c int;
BEGIN
c := 1;
b := a + c;
d := b;
return c;
END; $$
LANGUAGE 'plpgsql' NOT FENCED;
ERROR: "func8_2" functions with plpgsql language and out params are not supported Overloaded.
DETAIL: N/A.
CREATE or replace FUNCTION func8_2(in a integer, out b integer)
RETURNS int
AS $$
DECLARE
c int;
BEGIN
c := 1;
b := a + c;
return c;
END; $$
LANGUAGE 'plpgsql' NOT FENCED;
create or replace package pck8_2
is
function func8_2(in a int, out b int)
return int;
function func8_2(in a int, out b int, out d integer)
return int;
end pck8_2;
/
ERROR: "func8_2" functions with plpgsql language and out params are not supported Overloaded.
DETAIL: N/A.
--8.3 同一schema、package下,允许存在同名的psql语言的不带out出参函数
CREATE or replace FUNCTION func8_3(in a integer)
RETURNS int
AS $$
DECLARE
c int;
b int;
BEGIN
c := 1;
b := a + c;
return c;
END; $$
LANGUAGE 'plpgsql' NOT FENCED;
CREATE or replace FUNCTION func8_3(in a integer, in b integer)
RETURNS int
AS $$
DECLARE
c int;
BEGIN
c := 1;
b := a + c;
return c;
END; $$
LANGUAGE 'plpgsql' NOT FENCED;
create or replace package pck8_3
is
function func8_3(in a int)
return int;
function func8_3(in a int, in b int)
return int;
end pck8_3;
/
select proname from pg_proc where proname = 'func8_3' order by 1;
proname
---------
func8_3
func8_3
func8_3
func8_3
(4 rows)
create or replace function f1(in a int, out b int) return int
as
declare
c int;
begin
c := a - 1;
b := a + 1;
return c;
end;
/
select * from generate_series(1,100) where generate_series > f1(90, null);
generate_series
-----------------
90
91
92
93
94
95
96
97
98
99
100
(11 rows)
declare
res int;
begin
res := f1(10, 888); -- out出参传入常量,报错
raise info 'res is:%',res;
end;
/
ERROR: when invoking function f1, no destination for argments ""
CONTEXT: compilation of PL/pgSQL function "inline_code_block" near line 1
drop function f1;
create or replace package pck1 is
type tp1 is record(v01 number, v03 varchar2, v02 number);
function f1(in a int, out c tp1) return int;
end pck1;
/
create or replace package body pck1 is
function f1(in a int, out c tp1) return int
as
declare
begin
c.v01:=a;
return a;
end;
end pck1;
/
select pck1.f1(10,(1,'a',2));
f1
----
10
(1 row)
select *from pck1.f1(10,(1,'a',2));
f1 | c
----+--------
10 | (10,,)
(1 row)
call pck1.f1(10,(1,'a',2));
f1 | c
----+--------
10 | (10,,)
(1 row)
--clean
reset behavior_compat_options;
drop schema out_param_schema cascade;
NOTICE: drop cascades to 24 other objects
DETAIL: drop cascades to function func1(integer)
drop cascades to function func1_1(integer,integer)
drop cascades to function func2(integer)
drop cascades to function func3(integer)
drop cascades to function func4(integer)
drop cascades to function func4_1(integer,integer,integer)
drop cascades to function func5_1(integer)
drop cascades to function func5_2(integer)
drop cascades to function func6_1(integer)
drop cascades to function func6_2(integer)
--?.*
drop cascades to function out_param_schema.func7_1(integer)
--?.*
drop cascades to function out_param_schema.func7_2(integer)
drop cascades to function out_param_schema.func8_1(integer)
drop cascades to function out_param_schema.func8_1(integer)
drop cascades to function func8_2(integer)
drop cascades to function func8_3(integer)
drop cascades to function func8_3(integer,integer)
--?.*
drop cascades to function out_param_schema.func8_3(integer)
drop cascades to function out_param_schema.func8_3(integer,integer)
--?.*
drop cascades to function out_param_schema.f1(integer)