插入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'
);
表格说明:
-1行插入
我想在percent_rent列中插入33,33,但它不允许我这样做。 请问为什么case1失败了?我也插入了列描述图片。
答案 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就无济于事。您必须选择一种方法来指定小数点。