2010-02-25 5 views
4

악명 높은 잘못된 번호 Oracle 오류가 발생합니다. Hibernate는 많은 컬럼을 가진 INSERT를 발행하고 있으며, 문제를 일으키는 컬럼의 이름만을 알고 싶다. 가능한가? 당신은 오라클이 문제의 원인이되는 열을 당신에게 얻을 수없는, 불행하게도ORA-01722 : 잘못된 번호

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 
    (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 
+1

는 테이블 정의의 (필드의 숫자입니다 이상 또는?). 이 타입이없는 삽입은 이런 타입의 에러를 디버깅하는데 꽤 쓸모가 없다. – Joe

답변

6

그것은 당신에게 오류의 SQL 문자열의 문자 위치를 알려줍니다

해보십시오 DBMS_SQL.LAST_ERROR_POSITION. 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'은 앞의 공백을 무시한 '삽입'의 오프셋입니다.

0

:

는 참고로 삽입이됩니다. sqlplus를 통해 수동으로 실행할 수있는 삽입 문으로 삽입 데이터를 덤프 할 수 있습니까?