oracle错误:"这里不允许列"

时间:2014-04-27 13:44:54

标签: sql oracle

CREATE TABLE Personn (
     pid INTEGER PRIMARY KEY,
     iname VARCHAR(50),
     gender CHAR(1),
     dateOfBirth DATE,
CONSTRAINT person_gender
CHECK (Gender BETWEEN 'f' AND 'm')  
  );

INSERT INTO Personn VALUES ('1005','john', 'M', 24/apr/1999 );
Error starting at line : 18 in command -
INSERT INTO Personn VALUES ('1005','john', 'M', 24/apr/1999 )
Error at Command Line : 18 Column : 52
Error report -
SQL Error: ORA-00984: column not allowed here
00984. 00000 -  "column not allowed here"
*Cause:    
*Action:

4 个答案:

答案 0 :(得分:2)

INSERT INTO Personn VALUES ('1005','john', 'm', to_date('24/apr/1999', 'dd/mon/yyyy') );

答案 1 :(得分:2)

最好不要假设日期格式已设置为用户会话中的任何特定值 - 否则您可能会在以后遇到意外错误。

相反,在这种情况下使用日期文字:

INSERT INTO Personn VALUES ('1005','john', 'M', DATE '1999-04-24');

此外,如果列的顺序在将来发生变化(这可能在架构重建时发生),则枚举列更安全,例如:

INSERT INTO Personn (pid, iname, gender, dateofbirth)
VALUES (1005,'john', 'm', DATE '1999-04-24');

编辑:修正了pid和性别的文字

答案 2 :(得分:0)

日期应该在引号内 试试这个

INSERT INTO Personn VALUES ('1005','john', 'M', '24/apr/1999') 

答案 3 :(得分:-1)

您应该更改插入语句。日期值应以字符串文字形式给出。

所以改变

INSERT INTO Personn VALUES ('1005','john', 'M', 24/apr/1999 );

INSERT INTO Personn VALUES (1005, 'john', 'M', '24/apr/1999');

由于您的主键是整数,因此您可以在那里省略单引号。