插入查询期间的编号无效

时间:2015-11-30 08:10:48

标签: sql oracle oracle11g sql-insert number-formatting

插入SQL

ThenBy

错误

  

-ORA-01722:无效数字

INSERT INTO TB.SDL
  (
    SOL_ID,
    LOCKER_TYPE,
    LOCKER_NO,
    CUST_ID,
    STAFF_FLG,
    RENT_AMOUNT_CHARGED,
    PERCENT_RENT,
    START_DATE,
    LCHG_TIME,
    LCHG_USER_ID,
    RCRE_TIME,
    RCRE_USER_ID,
    DEL_FLG,
    BANK_ID
  )
  VALUES
  (
    '42' ,
    'KUK' ,
    'KU19' ,
    '00080' ,
    'N',
    '49.50' ,
    '33,33',
    sysdate,
    sysdate,
    'AAY' ,
    sysdate,
    'AAY' ,
    'N',
    '01'
  );

表格说明

enter image description here

  

-1行插入

我想在percent_rent列中插入33,33,但它不允许我这样做。 请问为什么case1失败了?我也插入了列描述图片。

2 个答案:

答案 0 :(得分:1)

您的表格说明显示,PERCENT_RENT列是 NUMBER(9,6)数据类型。问题是您要插入的值'33,33'字符串,而不是数字

按原样插入数字,无需单引号

例如,

SQL> CREATE TABLE t(A NUMBER(9,6));

Table created.

SQL> INSERT INTO t(A) VALUES(33.33);

1 row created.

SQL> COMMIT;

Commit complete.
  

我想在percent_rent列中插入33,33,但它不允许我这样做

格式由 NLS_NUMERIC_CHARACTERS 参数控制。

您可以在会话级别个人SQL级别指定它。

如果您想所需格式 插入数字,则必须使用 TO_NUMBER

例如,

SQL> INSERT INTO t (a)
  2    VALUES
  3    (
  4      TO_NUMBER('33,33','9G999D00', 'NLS_NUMERIC_CHARACTERS = '',.''')
  5    );

1 row created.

 SQL> COMMIT;

Commit complete.

SQL> SELECT * FROM t;

         A
----------
     33,33

现在,要以所需格式 显示数字,请使用 TO_CHAR

例如,

SQL> SELECT TO_CHAR(A,'9G999D00', 'NLS_NUMERIC_CHARACTERS = '',.''') my_number_format
  2  FROM t;

MY_NUMBER
---------
    33,33

答案 1 :(得分:0)

除了上述答案之外......您使用小数标记的句点代表RENT_AMOUNT_CHARGED,而PERCENT_RENT使用coimma。两者都在一个字符串中,但只有一个可以转换为数字,如错误中的输出所示。

为什么不尝试在pct中加入一段时间来试试这个建议呢?只要在两个字符串中有不同的制造商,设置NLS_NUMERIC_CHARACTERS就无济于事。您必须选择一种方法来指定小数点。