插入查询期间数字无效
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_RENT
是 NUMBER(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 就无济于事。您必须选择一种方式来指定您的小数点。
插入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_RENT
是 NUMBER(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 就无济于事。您必须选择一种方式来指定您的小数点。