无法使用 pgplsql(Redshift 环境)将记录插入到 LOOP 语句内的表中

问题描述 投票:0回答:1

我无法使用 PL/pgSQL(Redshift 环境)将记录插入到 LOOP 语句内的表中;除了添加

insert
语句外,一切正常;并且无法使用
insert
逻辑内的
LOOP
语句创建/修改该过程。

编译错误是

SQL Error \[42601\]: ERROR: syntax error at or near "$1"
Where: SQL statement in PL/PgSQL function "usp_ppv_process_cs_6months" near line 29

我尝试通过添加

insert
语句来修改程序,但它不起作用;尝试编译过程代码时出现 SQL 错误 42601。

create or replace  PROCEDURE aigdm.usp_ppv_process_cs_6months() AS $$
DECLARE
    po_nbr varchar(50);
    po_line_nbr varchar(50);
    due_date timestamp; 
    po_qty int; 
    po_amt_in_po_currency float8;
    rowcount int;
    target record; 
    open_po_cursor cursor for 
    SELECT
    wo_nbr
    ,po_line_nbr
    ,txn_date
    ,txn_qty
    ,po_amt_in_po_currency
    from
    aigdm.vw_aig_inventory_mrp
    where wo_nbr in ('257360CS','254358CS' );
BEGIN
    OPEN open_po_cursor; 
    po_nbr:= null;
    po_line_nbr := null;
    due_date := null; 
    po_qty := null; 
    po_amt_in_po_currency := null; 
     LOOP
        fetch open_po_cursor into po_nbr,po_line_nbr,due_date,po_qty,po_amt_in_po_currency;
        exit when not found;
        insert into aigdm.aig_bi_ppv_cs_6months (po_nbr) values (po_nbr); 
        commit;
    RAISE INFO 'a % at ', po_nbr; 
    END LOOP; 
    CLOSE open_po_cursor; 
END;
$$ LANGUAGE plpgsql;
stored-procedures amazon-redshift plpgsql
1个回答
0
投票

问题在于您使用的变量名称等于列名称。由于您有一个变量

po_nbr
,您的
INSERT
语句

insert into aigdm.aig_bi_ppv_cs_6months (po_nbr) values (po_nbr)

导致这个准备好的声明

insert into aigdm.aig_bi_ppv_cs_6months ($1) values ($1)

这在语法上是不正确的,因为您不能使用列名参数。

重命名变量将解决问题。

但是这里完全没有必要使用过程。您可以使用单个

INSERT
语句更有效地完成同样的事情:

INSERT INTO aigdm.aig_bi_ppv_cs_6months (po_nbr)
SELECT wo_nbr
FROM aigdm.vw_aig_inventory_mrp
WHERE wo_nbr IN ('257360CS','254358CS' );
© www.soinside.com 2019 - 2024. All rights reserved.