gpt4 book ai didi

sql - 使用多个复合输出参数调用 PostgreSQL 函数

转载 作者:搜寻专家 更新时间:2023-10-30 19:46:28 26 4
gpt4 key购买 nike

我想在 PostgreSQL 9.1 中定义一个函数,它接受多个复合类型的 INOUT 参数,但我不知道如何调用它。

例如。

CREATE TYPE my_type_a AS (a integer, b float);
CREATE TYPE my_type_b AS (c boolean, d varchar(5));

CREATE FUNCTION my_complex_func(INOUT a my_type_a, INOUT b my_type_b)
RETURNS RECORD
'...'
LANGUAGE plpgsql;

定义语句执行得很好,但我不知道如何调用这个函数!我试过:

SELECT INTO a, b
a, b FROM my_complex_func(a, b);

但这给出了一个错误:

ERROR:  record or row variable cannot be part of multiple-item INTO list

最佳答案

我认为这与您的输入类型或输入数量无关。

不返回 RECORD,返回一个真正的复合类型(用 CREATE TYPE 定义)。

错误 record or row variable cannot be part of multiple-item INTO list 是因为您试图将一个 ROW 嵌套在另一个 ROW 中。

这应该有效:

CREATE TYPE my_type_a AS (a integer, b float);
CREATE TYPE my_type_b AS (c boolean, d varchar(5));
CREATE TYPE ret_type AS (w integer, v boolean);

CREATE FUNCTION my_complex_func(INOUT a my_type_a, INOUT b my_type_b)
RETURNS ret_type as $$
...
$$ LANGUAGE plpgsql;

然后你可以做:

SELECT INTO a, b 
(x.comp).w, (x.comp).v
FROM (select my_complex_func(j, i) as comp) x;

这个具体示例对我有用:

create type smelly1 as (a integer, b text);
create type smelly2 as (a boolean, b float);
create type rettype as (w integer, v boolean);
create function foo_func(n smelly1, m smelly2) returns rettype as $$
declare
f_ret rettype;
begin
f_ret.w := n.a;
f_ret.v := m.a;
return f_ret;
end;
$$ language plpgsql;

select (x.comp).w, (x.comp).v from
(select foo_func('(4, hello)'::smelly1, '(true,3.14)'::smelly2) as comp) x;

返回:

 w | v 
---+---
4 | t
(1 row)

关于sql - 使用多个复合输出参数调用 PostgreSQL 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10024905/

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