SQL错误:ORA-01722:无效的数字

Pap*_*twe -1 oracle

我附上了表格和我正在处理的插入语句.

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)

Ste*_*n C 5

让我们从逻辑上看这个.错误消息是"无效号码".甲骨文对你说"我期待一个号码,但你给了我一些不是数字的东西".

查看表SQL,您可以看到该表有两列,其类型是数字类型(实际上INTEGER).这些是DRIVER_IDPHONE.(其他列现在无关紧要......因为他们不会期望一个数字作为值.)

现在看一下插入SQL,以及与这些列对应的值.

  • 插入到DRIVER_ID列中的值来自SEQ_EMP.NEXTVAL...我假设它具有类型INTEGER.这意味着,你不会从那里得到错误.

  • 插入到PHONE列中的值是'410-555-1112'.但是,嘿,这不是一个数字.它是一根绳子!除了(数学)数字之外没有嵌入连字符!

简而言之,如果您要存储嵌入其中-(+或空格)字符的电话号码,则不能将其INTEGER用作列类型.