/ / Zrozumienie operatora selekcji PostgreSQL - sql, postgresql

Zrozumienie operatora wyboru PostgreSQL - sql, postgresql

Piszę następującą procedurę przechowywaną:

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();

A kiedy próbuję wykonać ten skrypt, otrzymałem błąd:

column reference "id" is ambiguous

Czemu? Myślałem, że id kolumna zwróconej tabeli nie uczestniczy w operatorze select ...

Problem polega na tym, że pracował PostgreSQL 8.4 ale nie działa PosgtreSQL 9.4. Nie mógłbyś wyjaśnić, co faktycznie zostało dodane w PostgreSQL 9.4 więc to nie działa?

Odpowiedzi:

3 dla odpowiedzi № 1

Postgres jest zdezorientowany, gdy używasz tych samych nazw dla argumentów i kolumn ... Rozważ użycie konwencji z pewnym prefiksem dla wszystkich parametrów wejściowych - na przykład p_id Napisałbym:

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 dla odpowiedzi nr 2

Aby rozwiązać ten konkretny problem, możesz to zrobić w swoim wyborze:

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