आप किसी तालिका को पैरामीटर के रूप में पास नहीं कर सकते, केवल तालिका का नाम:
CREATE FUNCTION test.fcttest(tbl text) RETURNS SETOF test.out_table AS $$
BEGIN
EXECUTE format('INSERT INTO test.out_table '
'SELECT id, another_field FROM %I', tbl);
RETURN QUERY EXECUTE format('SELECT id, another_field FROM %I', tbl);
END;
$$ LANGUAGE plpgsql;
तालिका नाम पास करते समय आपको एक गतिशील कमांड निष्पादित करने की आवश्यकता होती है। आप इसे केवल plpgsql फ़ंक्शन में ही कर सकते हैं। format()
. का उपयोग %I
. के साथ कार्य करें संशोधक SQL इंजेक्शन से बचाता है। पंक्तियों को RETURN NEXT QUERY
. का उपयोग करके लौटाया जाता है वाक्यांश, फिर से एक गतिशील आदेश के साथ।
ध्यान दें कि यह तर्क दोनों तालिका में रिकॉर्ड का एक सेट सम्मिलित करता है test.out_table
और फिर रिकॉर्ड का वही सेट लौटाता है। सुनिश्चित नहीं है कि आप वास्तव में यही चाहते हैं।