0
繼續執行a previous case(@Erwin Brandstetter的解決方案),其中使用「準備」語句的動態SELECT查詢已創建,然後是將使用準備語句的動態查詢的輸出保存到表中
--the功能使得準備的語句:
CREATE OR REPLACE FUNCTION f_prep_query (_tbl regclass, _prefix text)
RETURNS void AS
$func$
DECLARE
_prep_qry text := (
SELECT 'PREPARE stmt_dyn AS SELECT '
|| string_agg(quote_ident(attname), ',' ORDER BY attname)
|| ' FROM ' || _tbl
FROM pg_attribute
WHERE attrelid = _tbl
AND attname LIKE _prefix || '%'
AND attnum > 0
AND NOT attisdropped
);
BEGIN
EXECUTE _prep_qry;
EXCEPTION WHEN duplicate_prepared_statement THEN
DEALLOCATE stmt_dyn;
EXECUTE _prep_qry;
END
$func$ LANGUAGE plpgsql;
--the電話:
BEGIN; -- optional
SELECT f_prep_query('dkj_p_k27ac'::regclass, 'enri'::text);
EXECUTE stmt_dyn;
通過調用它,如下執行
我想問問以下問題: 我們從指示的過程中獲得的所需輸出被輸出到DataOutput中。 我想找到一種方法將數據存儲到數據庫中的新表中。
我明白了,所以'準備好'的解決方案似乎在這方面相當有限,而'refcursor'解決方案確實使我們能夠創建一個新表格(這是原始計劃的一部分)。 「準備」僅限於INSERT,UPDATE和DELETE,有點奇怪,因爲它以某種方式降低其功能。我們之前完成的任務背後的全部想法是生成一個只包含選定列數的子表,我們不希望明確地預先定義,但是評估者依賴於它們的共享前綴。 – Roy
我們在這裏使用'prepared'select語句,因爲它是如何執行動態SELECT語句的解決方案之一。整個過程似乎工作正常,因爲我們在這裏闡述:stackoverflow.com/questions/27831796/...和這裏:http://stackoverflow.com/questions/27824725/use-text-output-from-a-function-as-新的查詢/ 27830985#27830985 – Roy
斷開的鏈接導致用例的正確解決方案:http://stackoverflow.com/questions/27831796/saving-the-output-of-a-dynamic-query-that-uses -refcursor-into-a-table要***動態創建***表,遊標和預準備語句都不是很好的工具。 –