怎么把存储过程的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...

以上是 怎么把存储过程的insert语句打印出来 的全部内容, 来源链接: utcz.com/p/169314.html

回到顶部