如何找到导致ORA-01722的错误数据

时间:2018-06-14 13:26:49

标签: oracle sql-order-by ora-01722

我正在使用ojdbc8运行直接查询,以便针对某些结果抛出java.sql.SQLSyntaxErrorException: ORA-01722: invalid number

这在SQL Developer中发生,并通过java API(这里名称是varchar):

Statement sel = conn.createStatement();
ResultSet rs = sel.executeQuery("select * from t1 order by name");
while(rs.next())

通过调试,我已经隔离了导致错误的几行,但是当我只选择那些行(而不是选择*)时,我没有遇到错误,这让我相信这一点可能是某种驱动/性能问题?

我还尝试使用我在此处找到的代码查找错误数据,但它返回时没有错误(PL/SQL procedure successfully completed):

set serveroutput on
DECLARE
   exc EXCEPTION;
   PRAGMA EXCEPTION_INIT(exc, -1722);
   l_message VARCHAR2(4000);
BEGIN
   EXECUTE IMMEDIATE 
   'select * from t1 order by name';
EXCEPTION
   WHEN exc THEN
      l_message := regexp_replace(sqlerrm, '^[A-Z]{3}-[0-9]{5}: "([^"]+)".*$', '\1');

      dbms_output.put_line ( 'bad data '''||l_message||'''');
      dbms_output.put_line ( 'exception: sqlcode='||SQLCODE||', sqlerrm='''||sqlerrm||'''');

   WHEN OTHERS THEN
      RAISE;
END;

0 个答案:

没有答案