2012-08-16 11 views
22

में एक टेबल बनाने के लिए मैं अपने कार्यों में से एक में अस्थायी तालिका बनाने के लिए SELECT INTO का उपयोग करना चाहता हूं। SELECT INTO एसक्यूएल में काम करता है लेकिन पीएल/पीजीएसक्यूएल नहीं।चुनें .. पीएल/पीजीएसक्यूएल

यह बयान (orig_table एक रिश्ता के रूप में मौजूद है) एक मेज कहा जाता mytable बनाता है:

SELECT * 
INTO TEMP TABLE mytable 
FROM orig_table; 

लेकिन PostgreSQL में इस समारोह रखा, और आप त्रुटि मिलती है: ERROR: "temp" is not a known variable

CREATE OR REPLACE FUNCTION whatever() 
RETURNS void AS $$ 
BEGIN 
    SELECT * 
    INTO TEMP TABLE mytable 
    FROM orig_table; 
END; $$ LANGUAGE plpgsql; 

मैं कर सकते हैं SELECT INTO पीएल/पीजीएसक्यूएल के भीतर record के प्रकार का एक चर, लेकिन तब मुझे उस रिकॉर्ड से डेटा प्राप्त करते समय संरचना को परिभाषित करना होगा। SELECT INTO वास्तव में सरल है - स्वचालित रूप से SELECT क्वेरी की उसी संरचना की एक तालिका बना रहा है। क्या किसी के पास कोई स्पष्टीकरण है कि यह फ़ंक्शन के अंदर क्यों काम नहीं करता है?

ऐसा लगता है कि SELECT INTO पीएल/पीजीएसक्यूएल में अलग-अलग काम करता है, क्योंकि आप घोषित वैरिएबल में चयन कर सकते हैं। हालांकि, मैं अपनी अस्थायी तालिका संरचना घोषित नहीं करना चाहता हूं। काश यह सिर्फ एसक्यूएल में स्वचालित रूप से संरचना बना देगा।

उत्तर

36

प्रति http://www.postgresql.org/docs/current/static/sql-selectinto.html

CREATE TABLE AS is functionally similar to SELECT INTO. CREATE TABLE AS is the recommended syntax, since this form of SELECT INTO is not available in ECPG or PL/pgSQL, because they interpret the INTO clause differently. Furthermore, CREATE TABLE AS offers a superset of the functionality provided by SELECT INTO.

+0

धन्यवाद

CREATE TEMP TABLE mytable AS SELECT * FROM orig_table; 

कोशिश करो! मुझे पता था कि मैंने पहले इस समस्या को हल किया था, और मुझे postgresql दस्तावेज़ों से यह वाक्य याद है। मैं पूरी तरह से टेबल बनाने के बारे में भूल गया था। – nnyby

+0

जिसने मुझे थोड़ी देर के लिए पूरी तरह से स्टंप किया था - धन्यवाद। – mvexel