2015-04-07 28 views
1

我写了下面的存储过程:了解PostgreSQL的选择运算

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列不参与选择操作符...

问题是它的工作原理是PostgreSQL 8.4,但不适用于PosgtreSQL 9.4。难道你不能解释在PostgreSQL 9.4中实际添加了什么,所以它不起作用吗?

回答

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; 
2

为了解决这个具体问题你可以在你的选择中做到这一点:

SELECT player.id INTO rec FROM player WHERE player.id = 3;