[英]Execute prepare statement in a sql function
CREATE OR REPLACE FUNCTION my_function2()
RETURNS VOID
LANGUAGE plpgsql AS
$func$
BEGIN
PREPARE "my-statement7" (text, text) AS
INSERT INTO "table" (key, a_id)
VALUES ($1, $2);
EXECUTE format('EXECUTE "my-statement7" (%1, %2)', 'value1', 'value2');
END;
$func$;
SELECT my_function2();
但是,這將返回錯誤。
我在命令行中執行prepare語句時運行成功,但是在函數中執行時會提示錯誤。 有人說execute語句在execute語句或函數中會產生歧義,所以需要把execute改成execute格式。 但是,它也不起作用。 我想執行插入的准備語句,因為我有很多數據要以相同的格式插入,但數據可能需要插入到不同的表(數據也不同),所以我不能只插入 multi 或 COPY for它。 我認為 prepare 語句對我來說是解決方案,但它不能在函數中工作。 如果我想在一個函數中做很多“執行准備語句”,這會困擾我。
在 PL/SQL 中,查詢已經准備好並緩存起來,因此您不必這樣做。
由於每個表達式和 SQL 命令首先在函數中執行,PL/pgSQL 解釋器使用 SPI 管理器的 SPI_prepare 函數解析和分析命令以創建准備好的語句。 對該表達式或命令的后續訪問將重用准備好的語句。
如果你嘗試過,你會這樣寫。 請注意在名稱中使用_
而不是-
以避免引用問題; 無需格式化。
CREATE OR REPLACE FUNCTION my_function2()
RETURNS VOID
LANGUAGE plpgsql AS
$func$
BEGIN
PREPARE my_statement7 (text, text) AS
INSERT INTO example (key, a_id)
VALUES ($1, $2);
EXECUTE my_statement7( 'value1', 'value2');
END;
$func$;
然而,第一次它會失敗(原因我不完全理解): ERROR: function my_statement7(unknown, unknown) does not exist
。 第二次調用它也會失敗: ERROR: prepared statement "my_statement7" already exists
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.