插入查询期间数字无效

Invalid number during insert query

插入SQL:

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'
  );

错误:

-ORA-01722:Invalid Number

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'
  );

Table 描述:

-1 Row inserted

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

您的 table 描述表明列 PERCENT_RENTNUMBER(9,6) 数据类型。问题是您插入的值 '33,33'string 而不是 number.

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

例如,

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.

I want to insert 33,33 in percent_rent column but it doesnt let me do so

格式由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

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

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