我在弄清楚如何在單個函式中運行多個動態查詢時遇到了一些問題。
CREATE OR REPLACE FUNCTION cnms_fy22q2.test_function(
fyq text)
RETURNS void
LANGUAGE 'plpgsql'
COST 100
VOLATILE
AS $BODY$
BEGIN
-- logic
TRUNCATE TABLE 'schema_' || fyq || '.my_table'
DROP TABLE 'schema_' || fyq || '.my_table';
END;
$BODY$;
我通常會遇到語法錯誤,例如ERROR: syntax error at or near .... 我在這里做錯了什么?
uj5u.com熱心網友回復:
您不能簡單地連接字串來創建動態 sql 陳述句。看看EXECUTE和EXECUTE IMMEDIATE。
在您的情況下,您可以像這樣使用它:
CREATE OR REPLACE FUNCTION cnms_fy22q2.test_function(
fyq text)
RETURNS void
LANGUAGE 'plpgsql'
COST 100
VOLATILE
AS $BODY$
BEGIN
-- logic
EXECUTE 'TRUNCATE TABLE schema_' || fyq || '.my_table';
EXECUTE 'DROP TABLE schema_' || fyq || '.my_table';
END
$BODY$;
uj5u.com熱心網友回復:
使用格式函式,它將回傳一個字串并在您的函式中執行。
create function permanently_delete_table(fyq text) RETURNS void
LANGUAGE plpgsql AS $$
declare
begin
EXECUTE format('TRUNCATE TABLE schema_%s.my_table',fyq);
EXECUTE format('DROP TABLE schema_%s.my_table',fyq);
end
$$;
DBfiddle中的演示
uj5u.com熱心網友回復:
只是為了添加我想出的第三個選項,它將查詢組合在一個EXECUTE format();陳述句中,這就是我想出的:
CREATE OR REPLACE FUNCTION cnms_fy22q2.drop_summary_tables_function(
fyq text)
RETURNS void
LANGUAGE 'plpgsql'
COST 100
VOLATILE
AS $BODY$
BEGIN
-- logic
EXECUTE format(
'TRUNCATE TABLE schema_%s.my_table;
DROP TABLE schema_%s.my_table', fyq, fyq);
END;
$BODY$;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/480909.html
標籤:PostgreSQL 功能 动态 sql
