我附上了表格和我正在处理的插入语句.
CREATE TABLE EMP (
DRIVER_ID INTEGER NOT NULL
, FNAME VARCHAR(30) NOT NULL
, LNAME VARCHAR(30) NOT NULL
, ADDRESS VARCHAR(50) NOT NULL
, SALARY VARCHAR(50) NOT NULL
, DOB DATE NOT NULL
, SHIFTS VARCHAR2(20) NOT NULL
, SSN CHAR(11) NOT NULL
, PHONE INTEGER NOT NULL
, HIRING_DATE DATE NOT NULL
, EMAIL VARCHAR2(50) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
当我运行这个insert语句时:
INSERT INTO EMP (DRIVER_ID, FNAME, LNAME, ADDRESS, SALARY, DOB, SHIFTS, SSN, PHONE, HIRING_DATE, EMAIL)
VALUES (SEQ_EMP.NEXTVAL,'Emma', 'Johnson', '123 Main Street', 'DIRECT DEPOSIT', '31 JANUARY,1988', 'MORNING', '579-45-6666', '410-555-1112', '16 DECEMBER,2013', 'ejohnson@fakemail.com');
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息
SQL Error: ORA-01722: invalid number
01722. 00000 - "invalid number"
*Cause: The specified number was invalid.
*Action: Specify a valid number.
Run Code Online (Sandbox Code Playgroud)
让我们从逻辑上看这个.错误消息是"无效号码".甲骨文对你说"我期待一个号码,但你给了我一些不是数字的东西".
查看表SQL,您可以看到该表有两列,其类型是数字类型(实际上INTEGER).这些是DRIVER_ID和PHONE.(其他列现在无关紧要......因为他们不会期望一个数字作为值.)
现在看一下插入SQL,以及与这些列对应的值.
插入到DRIVER_ID列中的值来自SEQ_EMP.NEXTVAL...我假设它具有类型INTEGER.这意味着,你不会从那里得到错误.
插入到PHONE列中的值是'410-555-1112'.但是,嘿,这不是一个数字.它是一根绳子!除了(数学)数字之外没有嵌入连字符!
简而言之,如果您要存储嵌入其中-(+或空格)字符的电话号码,则不能将其INTEGER用作列类型.