如何在PostgreSQL中消除对INOUT参数少的函数的多次调用

如何在PostgreSQL中消除对INOUT参数少的函数的多次调用,postgresql,inout,Postgresql,Inout,我将代码从Oracle移植到PosgreSQL(经典,Carl)。 我发现,我的函数调用了3次,我举了一个简单的例子: 请看我的例子: create function trak_test001(inout int,inout int, inout int) AS $BODY$ <<trak_test001>> DECLARE x ALIAS FOR $1; y ALIAS FOR $2; z ALIAS FOR $3; BEGIN Raise DEBUG

我将代码从Oracle移植到PosgreSQL(经典,Carl)。 我发现,我的函数调用了3次,我举了一个简单的例子: 请看我的例子:

create function trak_test001(inout int,inout int, inout int)
AS
$BODY$
<<trak_test001>>
DECLARE
  x ALIAS FOR $1;
  y ALIAS FOR $2;
  z ALIAS FOR $3;

BEGIN
  Raise DEBUG  'trak_test001 FOR x=% y=% z=% ',x,y,z;
  x:=x+1;
  y:=y+1;
  z:=z+1;
END trak_test001;
$BODY$
LANGUAGE plpgsql VOLATILE 
COST 1000;

create function trak_test002()
RETURNS void
AS
$BODY$
<<trak_test002>>
DECLARE
  x int default 0;
  y int default 0;
  z int default 0;

BEGIN
  Raise DEBUG  'trak_test002 FOR x=% y=% z=% ',x,y,z;
 SELECT (trak_test001(x,y,z)).* INTO x,y,z;
    Raise DEBUG  'trak_test002 FOR x=% y=% z=% ',x,y,z;
END trak_test002;
$BODY$
LANGUAGE plpgsql VOLATILE 
COST 1000;

SELECT trak_test002();
这就是问题:为什么我的函数调用了3次,以及如何避免这种情况?
谢谢你。

我是个白痴。使用多个INOUT参数调用函数的正确方法是:

create function trak_test002()
RETURNS void
AS
$BODY$
<<trak_test002>>
DECLARE
  x int default 0;
  y int default 0;
  z int default 0;

BEGIN
  Raise DEBUG  'trak_test002 FOR x=% y=% z=% ',x,y,z;
 SELECT * INTO x,y,z FROM trak_test001(x,y,z);
    Raise DEBUG  'trak_test002 FOR x=% y=% z=% ',x,y,z;
END trak_test002;
$BODY$
LANGUAGE plpgsql VOLATILE 
COST 1000;
创建函数trak_test002()
返回无效
作为
$BODY$
声明
x int默认值为0;
y int默认值为0;
z int默认值为0;
开始
为x=%y=%z=%提升调试'trak_test002',x,y,z;
从trak_test001(x,y,z)中选择*进入x,y,z;
为x=%y=%z=%提升调试'trak_test002',x,y,z;
结束trak_test002;
$BODY$
语言plpgsql VOLATILE
费用1000元;

我是个白痴。使用多个INOUT参数调用函数的正确方法是:

create function trak_test002()
RETURNS void
AS
$BODY$
<<trak_test002>>
DECLARE
  x int default 0;
  y int default 0;
  z int default 0;

BEGIN
  Raise DEBUG  'trak_test002 FOR x=% y=% z=% ',x,y,z;
 SELECT * INTO x,y,z FROM trak_test001(x,y,z);
    Raise DEBUG  'trak_test002 FOR x=% y=% z=% ',x,y,z;
END trak_test002;
$BODY$
LANGUAGE plpgsql VOLATILE 
COST 1000;
创建函数trak_test002()
返回无效
作为
$BODY$
声明
x int默认值为0;
y int默认值为0;
z int默认值为0;
开始
为x=%y=%z=%提升调试'trak_test002',x,y,z;
从trak_test001(x,y,z)中选择*进入x,y,z;
为x=%y=%z=%提升调试'trak_test002',x,y,z;
结束trak_test002;
$BODY$
语言plpgsql VOLATILE
费用1000元;