使用存储函数postgresql创建表

时间:2017-05-23 07:19:17

标签: postgresql stored-functions

我对create table有一个查询,如下所示

DROP TABLE IF EXISTS BAJUL;
CREATE TABLE BAJUL AS (
SELECT dt_trx, row_number() OVER (ORDER BY dt_trx DESC) AS row_number
FROM stock_trx_idx
WHERE dt_trx BETWEEN '2017-01-01' AND '2017-02-28'
GROUP BY 1
ORDER BY 1 DESC);

如何在Postgresql中创建具有存储功能的上表? 我试过下面的脚本

CREATE OR REPLACE FUNCTION my_function (dt1 DATE, dt2 DATE)
  RETURNS VOID AS
$func$
BEGIN
EXECUTE format('
    DROP TABLE IF EXISTS tblq;
    CREATE TABLE IF NOT EXISTS tblq AS(
    SELECT dt_trx, row_number() OVER (ORDER BY dt_trx DESC) AS row_number
    FROM stock_trx
    WHERE dt_trx BETWEEN dt1 AND dt2
    GROUP BY 1
    ORDER BY 1 DESC
   )' );

END
$func$ LANGUAGE plpgsql;

但是当我尝试执行下面的SF时

SELECT my_function ('2017-01-01', '2017-02-28');

我收到了错误 - >错误:列" dt1"不存在

想寻求你的帮助。

谢谢& RGDS, 鲅鱼

2 个答案:

答案 0 :(得分:1)

使用

Night_Shift_End

答案 1 :(得分:0)

你的错误是显而易见的。在SELECT语句中,

SELECT dt_trx, row_number() OVER (ORDER BY dt_trx DESC) AS row_number
    FROM stock_trx
    WHERE dt_trx BETWEEN dt1 AND dt2
    GROUP BY 1
    ORDER BY 1 DESC

dt1列不存在。你没告诉他你想用你的变量。尝试将字符串与变量连接起来。

顺便说一句,如果您使用该语句创建表,则可以删除ORDER BY。