Как найти плохие данные, вызывающие ORA-01722

Я использую ojdbc8 для запуска прямого запроса, который выдает java.sql.SQLSyntaxErrorException: ORA-01722: invalid number для определенных результатов.

Это происходит в SQL Developer и через API Java (здесь имя varchar):

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

Посредством отладки я выделил несколько строк, которые вызывают ошибку, но когда я выбираю только эти строки (а не select *), я не испытываю ошибку, из-за чего я полагаю, что это может быть своего рода драйвером / производительностью вопрос?

Я также пытался найти плохие данные с кодом, который я нашел здесь на SO, но он возвращает без ошибок (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 ответов

Другие вопросы по тегам