簡體   English   中英

PostgreSQL:以日期為參數的循環中的准備好的語句

[英]Postgresql: prepared statements in loop with date as parameter

我有三個准備好的語句,它們從給定日期的不同表(多個選擇語句+聯接+子查詢)創建表,然后聯接兩個准備好的語句的結果,即:

CREATE TABLE _table1 AS
EXECUTE statement1('2000-01-01 00:00:00');

CREATE TABLE _table2 AS
EXECUTE statement2('2000-01-01 00:00:00');

CREATE TABLE _table3 AS
EXECUTE statement3('2000-01-01 00:00:00');

CREATE TABLE _table_all AS
SELECT *
FROM _table1
LEFT JOIN
_table3
ON _table1.var1 = _table3.var1;

Statement3建立在statement2上=從_table2中選擇(分開以使其更具可讀性)。

我想做的是:

  1. 為幾個日期執行相同的代碼->通過日期作為參數
  2. 將最終表:_table_all保存為_table_2000-01-01和_table_2000-02-01。

我不知道如何使這樣的循環/函數創建表並傳遞table_name和date作為參數。

預期結果:

FOR my_date IN ('2000-01-01 00:00:00', '2001-01-01 00:00:00', '2002-01-01 00:00:00'):

CREATE TABLE _table1 AS
EXECUTE statement1(@my_date);

CREATE TABLE _table2 AS
EXECUTE statement2(@my_date);

CREATE TABLE _table3 AS
EXECUTE statement3(@my_date);

CREATE TABLE _table_@my_date AS
SELECT *
FROM _table1
LEFT JOIN
_table3
ON _table1.var1 = _table3.var1;

DROP TABLE _table1;
DROP TABLE _table2;
DROP TABLE _table3;

有什么幫助嗎?

postgres中有兩種不同形式的EXECUTE

  • 程序PL / PgSQL語言的EXECUTE ,在這里描述:

https://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN

  • EXECUTE准備語句的EXECUTE ,作為獨立的SQL語句(不與過程語言綁定),描述如下:

https://www.postgresql.org/docs/current/static/sql-execute.html

是適合您目的 (動態SQL)的第一個,而不是第二個。 我懷疑您是通過查找關於EXECUTE並遵循錯誤線索而導致准備陳述的。 准備好的語句在您的上下文中沒有用。

有關相關的Q / A,請參見postgres中的動態sql查詢,通常,您會在stackoverflow或網絡上的其他地方找到動態SQL的示例。 例如,分區代碼往往看起來像您想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM