0
SQL> insert into patient
2  values('&pno','&pname','&title',&dob,&children,'&gp');
Enter value for pno: p3
Enter value for pname: mansell
Enter value for title: mr
Enter value for dob: 23-may-61
Enter value for children: 2
Enter value for gp: Dr.Williams
old   2: values('&pno','&pname','&title',&dob,&children,'&gp')
new   2: values('p3','mansell','mr',23-may-61,2,'Dr.Williams')
values('p3','mansell','mr',23-may-61,2,'Dr.Williams')

ERROR at line 2:
ORA-00984: column not allowed here

这曾经工作。我真的不明白如何使它工作..

4

3 回答 3

2

这个错误几乎肯定是由列引起的dob。您不是在插入日期或日期文字,而是在插入一个随机字符串,该字符串被解释为列名。

作为一般规则,始终明确地将日期转换为日期

您在 SQL*Plus 中有2 个选项,您可以插入ANSI 日期文字

insert into patient (dob)
values ( date '&dob')

&dob形式在哪里YYYY-MM-DD

您还可以使用该函数将列显式转换为日期to_date

insert into patient (dob)
values ( to_date('&dob','yyyy-mm-dd'))

&dob的形式在哪里yyyy-mm-dd。这被称为日期时间格式模型,您可以使用其中一长串。

所有这些都假设该列dob是一个date。如果不是,请将其更改为一个。将日期存储为字符串是不值得的。我强烈建议始终明确存储世纪。Oracle 如何知道您是在谈论 2067 年还是 1967 年?

Guffa 的回答会处理您问题的多行元素。

于 2012-08-26T13:00:15.400 回答
0

ORA-00984 错误

当您尝试在INSERT 语句的VALUES子句中包含列名时,最常发生此错误。

然后

您可以检查您插入的值和表的列名,并确保它们不一样。

参考

http://www.techonthenet.com/oracle/errors/ora00984.php

于 2012-08-26T11:46:33.943 回答
0

您以分号结束查询,之后您将无法继续添加到查询中。

您不能value在 之后添加更多语句insert,但可以使用insert all

insert all
into patient values('&pno','&pname','&title',&dob,&children,'&gp')
into patient values('&pno','&pname','&title',&dob,&children,'&gp')
into patient values('&pno','&pname','&title',&dob,&children,'&gp')
select * from dual;

(可能每行需要不同的参数名称。)

您还可以从 a 插入select

insert into patient
select '&pno','&pname','&title',&dob,&children,'&gp' from dual
union all
select '&pno','&pname','&title',&dob,&children,'&gp' from dual
union all
select '&pno','&pname','&title',&dob,&children,'&gp' from dual;

参考:http ://docs.oracle.com/cd/B13789_01/server.101/b10759/statements_9014.htm#SQLRF01604

于 2012-08-26T11:54:30.790 回答