gpt4 book ai didi

sql - 如何从函数 B 读取函数 A 的结果

转载 作者:行者123 更新时间:2023-11-29 12:51:40 24 4
gpt4 key购买 nike

我有两个 postgres 函数。函数A调用函数B,返回2条varchar类型的记录。

函数A

 CREATE OR REPLACE FUNCTION A(
IN r1 character varying,
IN r2 character varying,
OUT code character varying,
OUT msg character varying)

RETURNS record AS
$BODY$

BEGIN

perform function B(r1,r2);

END; $BODY$
LANGUAGE plpgsql VOLATILE

通过做

 select * from function A ('r1', 'r2')

我得到无效的列代码和消息。

运行函数 A,函数 B 工作正常并返回代码和消息。如何从函数 A 读取这两个返回值?

提前致谢!

最佳答案

当您执行 PERFORM 时,您的 SELECT 的结果将被丢弃,这不是我们想要的。

如果您的函数声明了 OUT 参数,您需要使用

SELECT ... INTO ...

所以方法是获取来自 B 函数的值,然后用它们填充输出参数,例如:

SELECT * INTO code, msg FROM B(r1, r2);

也就是说你的函数看起来像:

CREATE OR REPLACE FUNCTION A(
IN r1 character varying,
IN r2 character varying,
OUT code character varying,
OUT msg character varying)
RETURNS record AS
$BODY$
BEGIN
SELECT * INTO code, msg FROM B(r1, r2);
END;
$BODY$
LANGUAGE plpgsql VOLATILE;

你应该这样调用它:

SELECT * FROM A('first_arg', 'second_arg');

注意事项:

  • 重新考虑如果VOLATILE是你真正需要的。根据 B 函数代码,您可能只使用 STABLE 就可以了。这可能会加快速度
  • 为了缩短您的数据类型声明,character varyingvarchar 相同。考虑使用它。

关于sql - 如何从函数 B 读取函数 A 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52623567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com