我正在编写以下存储过程:
CREATE OR REPLACE FUNCTION getid() RETURNS table(id integer) AS $$
DECLARE
rec RECORD;
BEGIN
select id into rec from player where id = 3;
END $$
LANGUAGE plpgsql;
select * from getid();
当我尝试执行该脚本时,我收到了错误:
column reference "id" is ambiguous
为什么呢?我认为返回表的id
列不参与select运算符...
问题是它适用于PostgreSQL 8.4
但不适用于PosgtreSQL 9.4
。你无法解释PostgreSQL 9.4
中实际添加的内容,所以它不起作用吗?
答案 0 :(得分:3)
对参数和列使用相同的名称时,Postgres会感到困惑...考虑使用带有一些前缀的约定来表示所有输入参数 - 例如p_id 我会写:
CREATE OR REPLACE FUNCTION getid() RETURNS table(p_id integer) AS $$
DECLARE
rec RECORD;
BEGIN
SELECT INTO rec id FROM player WHERE id = 3;
END $$
LANGUAGE plpgsql;
答案 1 :(得分:2)
要解决该特定问题,请在选择中执行此操作:
SELECT player.id INTO rec FROM player WHERE player.id = 3;