gpt4 book ai didi

postgresql - 选择整数返回函数结果到变量 postgres

转载 作者:行者123 更新时间:2023-11-29 12:45:09 26 4
gpt4 key购买 nike

在 Postgres 中,我正在为我编写的函数(存储过程)编写测试脚本。该函数返回整数,即插入行的 ID。在测试脚本中,我想将该 id 选择到一个变量中并显示所有内容都已正确插入。

函数如下所示:

CREATE FUNCTION create_factor(p_name VARCHAR(255))
RETURNS integer AS
$$
DECLARE v_insert_id INTEGER;
BEGIN
....
RETURN v_insert_id AS id;
END;
$$ LANGUAGE plpgsql;

psql 脚本如下所示:

BEGIN;

\i create_factor.sql

DO $$
declare factorId integer;

select create_factor into factorId from /* have tried selecting * as well */
create_factor(
'my factor'::VARCHAR(255)
);

\x

select * from factors where name='my factor' and id=factorId;

\x

select k.key_name, v.value
from factors f
join factor_type_key_store k on k.factor_type_id = f.factor_type_id
join factor_key_value_store v on v.factor_type_key_store_id=k.id ;

END$$;

ROLLBACK;

我得到的错误如下:

psql:create_factor_test.sql:31: ERROR: invalid type name "create_factor.id into factorId from

明确指的是 select into 语句。我已经对函数定义和脚本进行了大量修改。不确定我错过了什么。

最佳答案

变量名和列别名在函数外不可见名称 可以使用OUT 参数设置。对于像您这样返回标量值的简单函数,默认列名称默认为函数名称。

CREATE FUNCTION create_factor(p_name text)
RETURNS integer AS
$func$
DECLARE
v_insert_id INTEGER;
BEGIN
....
RETURN v_insert_id; -- <strike>AS id</strike> -- pointless noise
END;
$$ LANGUAGE plpgsql;

如果你想使用 DO statement进行测试(我不明白这一点,但听从你的领导):

DO
$do$
DECLARE
factor_id integer := create_factor('my factor');
BEGIN
RAISE NOTICE 'New factor row: %'
, (SELECT f FROM factors f WHERE name = 'my factor' AND id = factor_id);
END
$do$;

我假设您知道 DO 语句中的代码默认是 PL/pgSQL,而不是纯 SQL?

您可以在 plpgsql 代码中声明一个变量,并在同一行为其赋值。

但是您不能从DO 语句中RETURN 任何内容。你需要另一个功能。 Raising a NOTICE可能适合你吗?不知道你想看什么,我在示例中返回了整行。

关于postgresql - 选择整数返回函数结果到变量 postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27663650/

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