代码之家  ›  专栏  ›  技术社区  ›  Lluis Martinez

ORA-01722:无效号码

  •  4
  • Lluis Martinez  · 技术社区  · 14 年前

    我得到一个臭名昭著的无效数字甲骨文错误。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 回复  |  直到 12 年前
        1
  •  6
  •   Gary Myers    14 年前

    尝试dbms_sql.last_error_位置

    它将告诉您错误在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'是'insert'的偏移量,忽略前面的空白。

        2
  •  1
  •   JavaRocky    14 年前

    您需要Oracle DML错误日志记录。你的朋友是最坏的。

    这可以告诉您哪个列失败。

    http://www.oracle-base.com/articles/10g/DmlErrorLogging_10gR2.php#insert

        3
  •  0
  •   a'r    14 年前

    不幸的是,您无法让Oracle告诉您是哪一列导致了问题。能否将insert数据转储为可以通过sqlplus手动运行的insert语句?