在SQL开发人员中我试图将数据插入表中,我在price
和sale price
收到错误,其中我使用900.99
作为数字。
INSERT INTO BIKES (MANUFACTURER_NAME, DEALER_NAME, BIKE_SIZE,
CLASSIFICATION, BIKE_ID, MODELS, PURCHASE_DATE,
PRICE, SALE_PRICE, SALE_DATE)
VALUES ('Superbike', 'Big Steve', 'Large male',
'Mountain', 0884621 , 'Speed Demon X1', '15/Jan/14',
900.99, 900.99, '25/Feb/14');
我正在使用这些边界:
PRICE number(6,2) CONSTRAINT PRICE_NN NOT NULL,
SALE_PRICE number(6,2) CONSTRAINT SALE_PRICE_NN NOT NULL,
很抱歉这个简单的问题 - 最近才开始使用SQL。
- Edit-- 这是完整的表格:
CREATE TABLE BIKES (
MANUFACTURER_NAME VARCHAR2 (100),
DEALER_NAME VARCHAR2 (100),
BIKE_SIZE VARCHAR2 (15),
CLASSIFICATION VARCHAR2 (15),
BIKE_ID NUMBER (7),
PRIMARY KEY (BIKE_ID),
MODELS NUMBER(7) CONSTRAINT SIZE_NN NOT NULL,
PURCHASE_DATE DATE CONSTRAINT PURCHASE_DATE_NN NOT NULL,
PRICE number(6,2) CONSTRAINT PRICE_NN NOT NULL,
SALE_PRICE number(6,2) CONSTRAINT SALE_PRICE_NN NOT NULL,
SALE_DATE DATE CONSTRAINT SALE_DATE_NN NOT NULL,
FOREIGN KEY (MANUFACTURER_NAME) REFERENCES MANUFACTURER(MANUFACTURER_NAME),
FOREIGN KEY (DEALER_NAME) REFERENCES DEALER(DEALER_NAME),
FOREIGN KEY (CLASSIFICATION, BIKE_SIZE)
REFERENCES BIKE_SPECS(CLASSIFICATION, BIKE_SIZE));
和错误消息:
Error starting at line 298 in command:
INSERT INTO BIKES( MANUFACTURER_NAME, DEALER_NAME, BIKE_SIZE, CLASSIFICATION, BIKE_ID, MODELS, PURCHASE_DATE, PRICE, SALE_PRICE, SALE_DATE)
VALUES ('Superbike','Big Steve','Large male','Mountain',0884621 ,'Speed Demon X1','15/Jan/14',900.99,900.99,'25/Feb/14')
Error report:
SQL Error: ORA-01722: invalid number
01722. 00000 - "invalid number"
*Cause:
*Action:
答案 0 :(得分:3)
型号(7)
' Speed Demon X1'
似乎上面的列数据类型NUMBER和作为字符串的值导致错误。
另一件事,
PURCHASE_DATE DATE
' 15 /月/ 14'
'15/Jan/14'
不是 DATE ,而是字符串。将值括在单引号中时,它被视为字符串。您必须使用 TO_DATE 以及正确的 FORMAT MODEL 将文字转换为日期。永远不要依赖内部数据类型转换。
将文字转换为日期,例如:
to_date('15/Jan/14','DD/Mon/RR')
要添加关于 DATE 的更多信息,请始终将年份视为 YYYY ,而不仅仅是 YY 。你不必重新发明Y2K的bug。世界已经看到了后果,浪费了大量的收入来解决它。一年应该是2015
而不是15
。
答案 1 :(得分:0)
似乎问题是NLS参数(NLS_NUMERIC_CHARACTERS)。
How NLS_NUMERIC_CHARACTERS parameter works
另一个关于NLS parameters的有用链接。