我很想利用PostgreSQL的SQL輸出格式化我的PL/pgSQL函數裏面有,但我開始覺得我必須放棄理念。從PL/pgSQL函數中打印ASCII-art格式的SETOF記錄
我有我的PL/pgSQL函數query_result
:
CREATE OR REPLACE FUNCTION query_result(
this_query text
) RETURNS SETOF record AS
$$
BEGIN
RETURN QUERY EXECUTE this_query;
END;
$$ LANGUAGE plpgsql;
..merrily從輸入文本查詢,返回SETOF
記錄,這我可以動態查詢使用我的SQL腳本:
mydb=# SELECT * FROM query_result('SELECT ' || :MYVAR || ' FROM Alice') AS t (id int);
id
----
1
2
3
所以,我的希望是找到一種方法,從獲得同樣很好地格式化輸出內一個PL/pgSQL的函數來代替,但RAISE
不支持SETOF
類型,並且有從SETOF
記錄文本沒有神奇的預定義鑄(我知道我可以創建自己的CAST
..)
如果我創建一個虛擬print_result
功能:
CREATE OR REPLACE FUNCTION print_result(
this_query text
) RETURNS void AS
$$
BEGIN
SELECT query_result(this_query);
END;
$$ LANGUAGE plpgsql;
。 。我無法打印格式化輸出:
mydb=# SELECT print_result('SELECT ' || :MYVAR || ' FROM Alice');
ERROR: set-valued function called in context that cannot accept a set
...
感謝您的任何建議(最好適用於PostgreSQL 8.4)。
你可以發佈PL/PGSQL函數嗎?運行任意查詢並使用該語言返回一組結果應該是完全可行的,但我不清楚您遇到了哪些障礙。 –
@Scott,謝謝,我用更多的細節更新了這個問題。 – Campa