Postgresql
使用可變表名在postgreSQL中準備查詢?
我正在嘗試創建
INSERT INTO
一個名稱在變數中的表myTable
。在 MySQL 中,我會這樣做:
SET @SQL = CONCAT('INSERT INTO ',myschema'.'mytable,' SELECT action_name, user, ...'); PREPARE stmt FROM @SQL; EXECUTE stmt; DEALLOCATE PREPARE stmt;
我檢查了 postgreSQL 文件以獲取準備好的語句,但找不到任何類似的範例。
我可以將查詢組合成一個字元串:
sql_query := 'INSERT INTO ' || mySchema || '.' || myTable || ' SELECT action_name, user, ';
但是我該如何執行呢?
要在 PostgreSQL 中編寫過程程式碼和使用變數,最常見的方法是在函式或塊 中使用plpgsql語言。文件中的Executing Dynamic Commands包含您需要的所有詳細資訊。
DO
請注意,動態 SQL 語句不需要像 MySQL 範例中那樣的 PREPARE。可以執行直接包含 SQL 查詢的動態字元串,並且在大多數情況下就是這樣做的。
Postgres 的初學者可能會感到困惑的是,它有兩種不同的 EXECUTE 形式:
EXECUTE command-string [ INTO [STRICT] target ] [ USING expression [, ... ]
在 plpgsql 程式碼塊中是一條plpgsql 指令。EXECUTE name [ ( parameter [, ...] ) ]
是一個SQL 查詢,其中name
是先前用 聲明的預準備語句的名稱PREPARE
。