H5W3
当前位置:H5W3 > 其他技术问题 > 正文

怎么把存储过程的insert语句打印出来

如题,我的一个方法需要调用别人的存储过程,但是报错了ORA-20001:ORA-01002:提取违反顺序。然后我去网上查了下,是因为便利游标的时候,有插入语句的同时,有commit或者rollback.然后我就去查了,确实是insert的时候,报错了,导致调用了rollback,但是我看不出来这个insert哪里有问题。能像java那样在控制台打印吗
图片描述

回答:

sql本身没问题,但可能是数据的问题,比如字段过长,类型不匹配,必填项缺失等

1.优先检查你的sql逻辑
1.存储过程循环插入的时候,建议将sql的自动提交关闭,避免commit和insert的冲突
2.如果是插入数据不合规的情况导致rollback,可以查看数据库日志,或者执行的sql历史,同时加入Exception,用于处理实际执行中出问题的情况,并输出相关信息,同时可以使用RAISE_APPLICATION_ERROR,这样JAVA调用的时候,可以通过catch SQLException来看

回答:

应该不是insert语句本身的问题,像下面的例子,循环中第一次commit之后,再执行隐式游标的FETCH动作取下一条记录,就会出现ORA-01002的错误

create or replace procedure SP_TEST is
begin
  FOR test1_row IN (SELECT * FROM test1 FOR UPDATE)
  LOOP
    UPDATE test1
    SET uname = uname || '*'
    WHERE id = test1_row.id;
    COMMIT;   
  END LOOP;
end SP_TEST;

在存储过程中写的就是SQL语句,不需要再打印了吧,变量可以用DBMS_OUTPUT.PUT_LINE()输出查看。

回答:

可以打开mysql的general log日志功能。
这个日志会记录所有sql语句。帮组文档见:https://dev.mysql.com/doc/ref…

本文地址:H5W3 » 怎么把存储过程的insert语句打印出来

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址