2010-02-25 32 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 2010-02-25 18:15:26

回答

6

嘗試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'是'插入'的偏移量,忽略任何前面的空格。

0

不幸的是,你不能讓甲骨文告訴你哪個列導致了問題。你可以將插入數據轉儲爲插入語句,你可以通過sqlplus手動運行嗎?