如何在使用子标量查询的Oracle PL/SQL 8i中循环游标?



我试图创建一个PL/SQL过程,需要通过游标做一个for循环。我在oracle论坛上看到PL/SQL 8i不支持子标量查询。

这是我目前为止写的:

DECLARE
   CURSOR C1
   IS
    SELECT texto,id_evento,clave_evento FROM gegf.eventos_omega_rima WHERE id_evento IN
        (select max(eo.id_evento)  from gegf.eventos_omega_rima eo, correctivo_rima.equipos b 
            where eo.fecha_ins_tab > sysdate - 25/24 and eo.fecha_ins_tab < sysdate - 1/24  and upper(eo.ORIGEN) = upper(b.nodo) and upper(b.red) = 'RIMA' group by eo.clave_evento);
    r_emp C1%ROWTYPE;
BEGIN
    OPEN C1;
    LOOP 
        FETCH c1 INTO r_emp;
        EXIT WHEN C1%NOTFOUND;        
        INSERT INTO CORRECTIVO_RIMA.T_CLOB VALUES (r_emp.TEXTO);
    END LOOP;
   CLOSE c1;
END;
/

我如何解决我不能在我使用的PL/SQL版本中使用子标量查询的事实?

PLS-00103告诉你问题在哪里;第6行第49列。在查询的这一部分:

where eo.fecha_ins_tab > sysdate -  and

…负号后面少了一些东西;假设您想从今天减去某个天数,但您没有提供该数字。

我没有一个8i数据库躺在周围(也许并不奇怪),但我不记得曾经需要引用游标查询;如果你这样做,我很确定分号需要在结束引号之外。但这也是导致前面第4行第5列错误的原因,它指向那个开始的引号。

您还将尝试插入最后一个值两次;您需要在测试INSERT之前测试C1%NOTFOUND,紧接在测试FETCH之后(除非您使用的是批量收集)。当然,你插入了一个虚拟值,但你会得到太多的行;对于真正的CLOB,您将处理最后一次获取值两次。

最新更新