带循环的SQL中的子查询

带循环的SQL中的子查询,sql,oracle,plsql,Sql,Oracle,Plsql,尝试在PLSQL循环中运行select语句时出错。我怎样才能让它工作 DECLARE v_gsp_cnt number := 0; BEGIN WHILE v_gsp_cnt > (select max(eachesrem) from salesplan) LOOP insert into salesplanexp (select SPNUM,ORDNUM,DMDTYPE,ORDSTATUS,ITEM,LOC,ITEMDESCR,FCST,ORDT

尝试在PLSQL循环中运行select语句时出错。我怎样才能让它工作

DECLARE 
    v_gsp_cnt number := 0;
BEGIN
    WHILE v_gsp_cnt > (select max(eachesrem) from salesplan)
    LOOP
        insert into salesplanexp (select SPNUM,ORDNUM,DMDTYPE,ORDSTATUS,ITEM,LOC,ITEMDESCR,FCST,ORDTYPE,DELSERVLVL,SHIPMETHOD,CARRIER,EACHES,SHIPPEDEACHES,EACHESREM,WEIGHT,VOLUME,STARTSHIPDATE,ENDSHIPDATE,ACTSHIPDATE,STARTDELDATE,ENDDELDATE,ACTDELDATE,ORDCREATEDATE,ORDCONFDATE,BILLCUSTNAME,BILLADD1,BILLADD2,BILLCITY,BILLSTATE,BILLCOUNTRY,BILLZIP,SHIPCUSTNAME,SHIPADD1,SHIPADD2,SHIPCITY,SHIPSTATE,SHIPCOUNTRY,SHIPZIP,LOCPHONE,LOCEMAIL,ACTITEMCOST,ACTITEMPRICE,ACTITEMMARGIN,ACTSHIPCOST,ACTSHIPPRICE,ACTSHIPMARGIN,ACTTOTCOST,ACTTOTPRICE,ACTTOTMARGIN,BRAND,CHANNEL,EXTORDID,EXTLINEID,SOURCESYS,CREATEDATE,LASTUPDATEDDATE from salesplan);
        commit;
        select x.new_cnt into v_gsp_cnt from (select v_gsp_cnt+1 from dual) x; 
        commit;
    END LOOP;
END;
错误是

ORA-06550: line 4, column 23:
PLS-00405: subquery not allowed in this context
ORA-06550: line 4, column 5:
PL/SQL: Statement ignored

我相信错误来自select语句。但对于循环,我不确定是否有其他方法可以使其正常运行

错误来自这一行:

WHILE v_gsp_cnt > (select max(eachesrem) from salesplan)
实际的错误有点欺骗性,但这是第4行的原始注释。。从申报开始计数

在这里不能有这样的查询

请尝试以下方法:

select max(eachesrem) into v_max from salesplan;

WHILE v_gsp_cnt > v_max

正如JNevill所提到的:您需要将内部v_gsp_cnt+1别名为new_cnt。。。但这是一个不同的错误,在你修复上面的错误后会出现

你说的一个错误。您介意分享它吗?这样我们就可以帮助您而不必猜测了?也许:从选择v_gsp_cnt+1中选择x.new_cnt到v_gsp_cnt,作为双x中的new_cnt???抱歉,刚才添加了错误。顺便说一下,最好在最后提交一次,而不是每次循环迭代提交多次。首先,如果中途失败,你可以重新启动。我得到的错误是必须声明v_max。所以我试图声明为v_max:=从salesplan中选择maxeachesrem;我也收到了一个错误,我发现了我的错误。这很有效。谢谢@baskinsr:通常你不是通过赋值来声明变量,而是通过实际声明变量。。。ie:v_max NUMBER;