指定有效数字SQL错误:ORA-01722:无效数字

时间:2015-11-28 13:20:52

标签: sql oracle

当我尝试将内容插入下表时,我需要帮助修复我收到的错误消息。一个例子可以帮助我更好地理解它。

CREATE TABLE EMP (
        EMP_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         CHAR(12)    NOT NULL
    , HIRING_DATE   CHAR(12)    NOT NULL
    , EMAIL     VARCHAR2(50)    NOT NULL
);

插入:

INSERT INTO EMP
VALUES(1,'Erica', 'Brandon', '425 Main Street', 'Credit Card', 
       '1965-06-30', 'Evening', '610-24-1111',
       '603-547-8296', '2010-01-16', 'ejohnson@fakemail.com');
  

错误报告 - SQL错误:ORA-01722:无效的数字   01722. 00000 - "无效数字"   *原因:指定的号码无效。   *操作:指定有效数字。

2 个答案:

答案 0 :(得分:1)

使用TO_DATE

INSERT INTO EMP 
VALUES(1,
       'Erica',
       'Brandon',
       '425 Main Street',
       'Credit Card',
       TO_DATE('1965-06-30', 'yyyy-mm-dd'),
       'Evening',
       '610-24-1111',
       '603-547-8296',
       TO_DATE('2010-01-16', 'yyyy-mm-dd'),
       'ejohnson@fakemail.com');

SqlFiddleDemo

优良作法是登记列名,如:

INSERT INTO EMP(EMP_ID,FNAME,LNAME...)
VALUES (...);

您应将HIRING_DATE存储为DATE而不是字符串。

答案 1 :(得分:0)

Oracle中的日期格式取决于国际化设置(默认情况并不好)。您可以使用INSERT INTO EMP VALUES(1, 'Erica', 'Brandon', '425 Main Street', 'Credit Card', DATE '1965-06-30', 'Evening', '610-24-1111', '603-547-8296', '2010-01-16', 'ejohnson@fakemail.com'); 关键字指定使用ISO标准格式的日期:

HiringDate

注意:

  • EMP应该是日期类型,而不是字符类型。
  • 您应列出insert。{/ li>中set { price = value / 100; }的列