ORA-01722: неверный номер - PullRequest
       18

ORA-01722: неверный номер

4 голосов
/ 25 февраля 2010

Я получаю печально известный неверный номер ошибки Oracle. Hibernate выпускает INSERT с большим количеством столбцов, я хочу знать только имя столбца, вызывающего проблему. Возможно ли это?

К вашему сведению:

insert into GEM_INVOICE_HEADER 
   (ENDORSEE_ACCOUNT_ID, INVOICE_CODE, APPROVAL_ORGAN, APROVAL_DATE, APROVAL_REFERENCE, BALANCE_BASE_AMOUNT, BALANCE_DEDUCT_AMOUNT, BALANCE_TOTAL_AMOUNT, BALANCE_VAT_AMOUNT, BALANCE_VAT_DED_AMOUNT, BALANCE_VAT_NOT_DED_AMOUNT, DESCRIPTION, SUPPLIER_INVOICE_NUMBER, INVOICE_DATE, RECEIPT_DATE, MEMO, VAT_INTRACOM, INVOICE_BASE_AMOUNT, INVOICE_VAT_AMOUNT, INVOICE_VAT_DED_AMOUNT, INVOICE_VAT_NOT_DED_AMOUNT, INVOICE_DEDUCT_AMOUNT, INVOICE_TOTAL_AMOUNT, VAT_EXEMPT, RECTIFICATION_SIGN, REASON, LOT, FILE_ID, RETAINED, INSTITUTION_ID, PERIOD_CODE, IS_RECTIFIED, DEFAULT_OFFBUDGET_ACCOUNT, OFFBUDGET_DOC_ID, PHASE_OF_ACCOUNTING, ACCOUNTED_OFF_BUDGET, CANCEL_DOC_ID, BUDGET_TYPE, INVOICE_TYPE, SOURCE_ID, STATE_ID, MANAGER_UNIT_ID, DOCUMENT_TYPE_CODE, ACCOUNTED_DOC_ID, ACCOUNTING_LIST, ENDORSEE_ID, PAYMASTER_ID, SUPPLIER_ID, SUPPLIER_ACCOUNT_ID, PAY_JUSTIFY_ID, PETTY_CASH_ID, DBOID) 
values 
   (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

Ответы [ 3 ]

6 голосов
/ 26 февраля 2010

Попробуйте DBMS_SQL.LAST_ERROR_POSITION

Он сообщит вам позицию символа в строке SQL ошибки. Не знаю, будет ли это работать из Hibernate, но из PL / SQL.

DECLARE
    v_ret NUMBER;
    v_text varchar2(10) := 'a';
BEGIN
    insert into a_test (val1, val2) values (1,v_text);
exception
    when others then 
        v_ret := DBMS_SQL.LAST_ERROR_POSITION;
        dbms_output.put_line(dbms_utility.format_error_stack);
        dbms_output.put_line('Error at offset position '||v_ret);
END;
.
/

Обратите внимание, что «43» - это смещение от «вставки», игнорируя любые предшествующие пробелы.

1 голос
/ 19 марта 2010

Вам нужна регистрация ошибок Oracle DML. Ваш друг ошибается $ _dest.

Это может сказать вам, в каком столбце произошел сбой.

http://www.oracle -base.com / статьи / 10г / DmlErrorLogging_10gR2.php # вставка

0 голосов
/ 25 февраля 2010

К сожалению, вы не можете заставить Oracle сообщить вам, какой столбец вызывает проблему. Можете ли вы выгружать данные вставки как операторы вставки, которые вы можете запустить вручную через sqlplus?

...