Sto scrivendo la seguente stored procedure:
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();
E quando sto cercando di eseguire quello script ho ricevuto l'errore:
column reference "id" is ambiguous
Perché? Pensavo che id
la colonna della tabella restituita non partecipa all'operatore di selezione ...
Il problema è che ha funzionato PostgreSQL 8.4
ma non funziona PosgtreSQL 9.4
. Non potresti spiegare cosa sia stato effettivamente aggiunto nel PostgreSQL 9.4
quindi non funziona?
risposte:
3 per risposta № 1Postgres è confuso quando usi gli stessi nomi per argomenti e colonne ... Considera l'uso di una convenzione con un certo prefisso per tutti i parametri di input, ad esempio p_id Vorrei scrivere:
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 per risposta № 2
Per risolvere quel problema specifico lo farebbe nella selezione:
SELECT player.id INTO rec FROM player WHERE player.id = 3;