【发布时间】:2021-07-30 21:21:33
【问题描述】:
我正在使用 oracle sql developer 并且代码工作得非常好,但突然现在它不工作了.. 当我运行执行行时,它给出“ORU-10027:缓冲区溢出,20000 字节限制”错误。这是我的代码
create or replace procedure update_painting_price
is
CURSOR c_painting is SELECT painting_id, painting_price FROM painting;
c_paintingid painting.painting_id%type;
c_paintingprice painting.painting_price%type;
total_rows number(2);
BEGIN
OPEN c_painting;
LOOP
FETCH c_painting into c_paintingid, c_paintingprice;
UPDATE painting
SET painting_price = painting_price + 50;
IF sql%notfound THEN
dbms_output.put_line('no painting updated');
ELSIF sql%found THEN
total_rows := sql%rowcount;
dbms_output.put_line( total_rows || ' paintings price updated ');
END IF;
END LOOP;
CLOSE c_painting;
END;
execute update_painting_price
【问题讨论】:
-
在遇到错误/异常之前,您没有条件结束循环
-
该过程在每幅画的价格上增加 50,对于每个循环迭代。更新应该有一些
where条件吗?这是什么意思? -
即使我添加
where条件我仍然得到同样的错误@GaryMyers -
没有
where条件。表中的每个价格都应该增加 50。@WilliamRobertson -
@maramSt 但它更新每行,每次。如果这确实是要求,那么您不妨只计算行数,然后将所有画作的价格提高 50 * 计数。 (我认为这不是要求。)而且循环永远不会结束,这就是你最大化输出缓冲区的原因。