我试图创建一个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,您将处理最后一次获取值两次。