2016-11-14 115 views
1

我得到 “ORA-01722:无效号码” 从该查询:为什么我从这个查询中得到无效号码?

INSERT INTO OLD_MATCHES 
(ID, LEAGUE, WEEK, MATCH_DATE, HOME, AWAY, HOME_GOALS, AWAY_GOALS, HOME_BET, DRAW_BET, AWAY_BET, LEAGUE_SEASON) 
VALUES 
(OLD_MATCHES_SEQ.NEXTVAL, 240, 11, '26-02-2016', 'Chelsea', 'Arsenal', 3, 0, 2, 3, 4, 'Premier league'); 

我看着在甲骨文常见问题解答这样的解释:

的ORA-01722( “无效号码”)时发生错误时的尝试将字符串转换为数字,并且该字符串不能转换为有效数字。有效的数字包含数字'0'到'9',可能有一个小数点,字符串开头或结尾的符号(+或 - ),或'E'或'e'(如果它是浮动的科学记数法中的点数)。所有其他角色都被禁止。

但它对我没有意义。

序列脚本:

CREATE SEQUENCE FOOTBALL.OLD_MATCHES_SEQ 
    START WITH 12 
    MAXVALUE 999999 
    MINVALUE 1 
    NOCYCLE 
    NOCACHE 
    NOORDER; 

表脚本:

CREATE TABLE FOOTBALL.OLD_MATCHES 
(
    ID    NUMBER       NOT NULL, 
    LEAGUE   NUMBER, 
    WEEK   NUMBER, 
    MATCH_DATE  DATE, 
    HOME   VARCHAR2(100 BYTE), 
    AWAY   VARCHAR2(100 BYTE), 
    HOME_GOALS  NUMBER, 
    AWAY_GOALS  NUMBER, 
    HOME_BET  NUMBER(5,2), 
    AWAY_BET  NUMBER(5,2), 
    DRAW_BET  NUMBER(5,2), 
    LEAGUE_SEASON NUMBER 
) 
+0

另外,'26 -02-2016'是一种非常奇怪的方式来在sql中设置日期格式。 '20160226'是仅限日期的值的标准,'2016-02-26 00:00:00.000'是包含时间分量的值的标准。 –

回答

3

这是无关的序列。根据你的表格定义,league_season是一个数字字段;你试图插入一个字符串,'Premier league'

您可能需要更改表定义,但它看起来更可能是因为您期待在那里有一个赛季的数字,大概一年:

INSERT INTO OLD_MATCHES 
(ID, LEAGUE, WEEK, MATCH_DATE, HOME, AWAY, HOME_GOALS, AWAY_GOALS, 
    HOME_BET, DRAW_BET, AWAY_BET, LEAGUE_SEASON) 
VALUES 
(OLD_MATCHES_SEQ.NEXTVAL, 240, 11, TO_DATE('26-02-2016', 'DD-MM-YYYY'), 
    'Chelsea', 'Arsenal', 3, 0, 2, 3, 4, 2015); 

而且'26 -02- 2016'不是日期,它是一个字符串。请使用ANSI date literal,如date '2016-02-26',或者使用to_date(),并使用合适的格式掩码,如上所述。不要依赖隐式转换和NLS设置。这不会导致这个错误,但有一天它会导致你的问题。

2

一种ORA-01722( “无效号码”)时试图向一个字符串转换为发生错误数字,并且该字符串不能转换为有效数字。有效的数字包含数字'0'到'9',可能有一个小数点,字符串开头或结尾的符号(+或 - ),或'E'或'e'(如果它是浮动的科学记数法中的点数)。所有其他角色都被禁止。

您需要更换OLD_MATCHES.LEAGUE_SEASONVarchar2

或更改您查询您插入数为LEAGUE_SEASON

INSERT INTO OLD_MATCHES 
(ID, LEAGUE, WEEK, MATCH_DATE, HOME, AWAY, HOME_GOALS, AWAY_GOALS, HOME_BET, DRAW_BET, AWAY_BET, LEAGUE_SEASON) 
VALUES 
(OLD_MATCHES_SEQ.NEXTVAL, 240, 11, '26-02-2016', 'Chelsea', 'Arsenal', 3, 0, 2, 3, 4, 1); 
相关问题