Redshift中的存储过程将数据加载到表中

Posted

技术标签:

【中文标题】Redshift中的存储过程将数据加载到表中【英文标题】:Stored procedure in Redshift to load data into a table 【发布时间】:2020-04-11 21:19:07 【问题描述】:

我有一个 sql 查询,它从 4 个表中获取数据,我想使用这个脚本将数据加载到 Redshift 中的另一个表中,我正在尝试创建一个存储过程,但我不断收到错误。下面是我的脚本。

CREATE or replace PROCEDURE ABC1 (SOURCE_SYS CHAR(3), FILE_NBR BIGINT)
AS
BEGIN
  INSERT INTO SP1 (SOURCE_SYS,FILE_NBR)
  VALUES(
    SELECT 'WT', PK_ORDERNO
    FROM table_1
    JOIN table_2 ON table_1.file_nbr = table_2.file_nbr
    LEFT OUTER JOIN table_3 ON table_2.file_nbr = table_3.file_nbr
  )
END;

【问题讨论】:

语法是INSERT INTO SP1(...) SELECT ... FROM ...(所以没有VALUES())。不过,目前还不清楚您要做什么。看起来查询实际上并没有使用过程的参数。请提供样本数据、期望的结果以及您的目的说明。 我有 2 个表表 1 和表 2。现在我创建了另一个表 Tablenew。这个 tablenew 将从连接 table1 和 table2 的 sql 语句中获取数据。现在我想创建一个 sp 将数据插入 tablenew。 【参考方案1】:

你应该这样做:

CREATE OR REPLACE PROCEDURE ABC1 (SOURCE_SYS CHAR(3),FILE_NBR BIGINT)
AS $$
BEGIN


    INSERT INTO SP1 (SOURCE_SYS,FILE_NBR)

    SELECT 'WT',PK_ORDERNO FROM 
    table_1 join table_2 on table_1.file_nbr=table_2.file_nbr
    left outer join
    table_3 on table_2.file_nbr = table_3.file_nbr ;

END;
$$ LANGUAGE plpgsql;

【讨论】:

我收到以下错误。[Amazon](500310) 无效操作:“$1”或附近的语法错误;

以上是关于Redshift中的存储过程将数据加载到表中的主要内容,如果未能解决你的问题,请参考以下文章

如何将列值从存储过程中的另一个表更新到表中?

时间戳未从 Glue 加载到 Redshift 表中

使用存储过程将数据插入从其他表派生的表中

我可以在存储过程中使用 if 语句将值插入到表中吗?

使用云功能将数据加载到大查询表中,它是附加到表中的,我需要它来替换

Redshift COPY 并自动创建表?