首页 > 解决方案 > 将变量放入 Redshift 存储过程中的 INSERT 语句中

问题描述

我有以下插入查询:

insert into stage(
    SELECT emp.emp_id, 
        LISTAGG(DISTINCT(group.group_name), ','), 
        LISTAGG(DISTINCT(emp.name), ','), 
        LISTAGG(DISTINCT(emp.date_hired), ',')
    FROM employee emp
    JOIN employee_group group ON group.id = emp.group_id
    WHERE emp.employed = 1 
        AND emp.type = 3 
        AND emp.date_hired >= dateadd(day, -2, current_date)

   GROUP BY emp.emp_id
);

我想将它添加到一个存储过程中,它在一个具有不同值的表中循环emp.type

像这样的东西(假设类型是之前声明的):

FOR employee_type IN SELECT * FROM employee_types LOOP
    EXECUTE 'INSERT into stage( SELECT emp.emp_id, LISTADD(DISTINCT(group.group_name), ','), LISTAGG(DISTINCT(emp.name), ','), LISTAGG(DISTINCT(emp.date_hired), ',') FROM employee emp JOIN employee_group ON group.id = emp.group_id WHERE emp.employed = 1 AND emp.type = ' || quote_literal(employee_type.type) ||' AND emp.date_hired >= dateadd(day, -2, current_date) GROUP BY emp.emp_id );';

每当我尝试运行它时,我都会收到一条错误消息[Amazon](500310) Invalid operation: query "SELECT 'INSERT ....'" returned 4 columns

我在这里缺少什么吗?我查看了 Redshift 文档,这应该可以。我不明白为什么它试图运行 select,或者为什么它抱怨返回 4 列。

标签: amazon-web-servicesamazon-redshiftplpgsql

解决方案


推荐阅读