/ / PostgreSQL चयन ऑपरेटर - एसक्यूएल, postgresql समझना

PostgreSQL चयन ऑपरेटर - एसक्यूएल, 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 № 1

जब आप तर्क और कॉलम के लिए समान नामों का उपयोग करते हैं तो पोस्टग्रेस उलझन में है ... सभी इनपुट पैरामीटर के लिए कुछ उपसर्ग के साथ एक सम्मेलन का उपयोग करने पर विचार करें - उदाहरण के लिए 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 № 2

उस विशिष्ट समस्या को हल करने के लिए आप इसे अपने चयन में करेंगे:

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