我在Oracle SQL
中创建了一个表:
create table t1
(
empno number(6) PRIMARY KEY,
empname varchar(30),
hiredate date,
basic number(8),
deptno number(4)
);
现在我使用单个查询:
将值插入表中insert into t1 values((131309,'HP','20-FEB-04',2000000,1235)
(131310,'HT','20-APR-14',120020,1234));
但这显示错误:
insert into t1 values((131309,'HP','20-FEB-04',2000000,1235),
*
ERROR at line 1:
ORA-00907: missing right parenthesis
我该如何纠正?
答案 0 :(得分:13)
INSERT VALUES
语句总是插入1行。如果要插入带有硬编码值的多行,最常见的方法就是执行两个单独的INSERT
语句。
insert into t1 values(131309,'HP','20-FEB-04',2000000,1235);
insert into t1 values(131310,'HT','20-APR-14',120020,1234);
如果您真的想要,可以从dual
中选择您的硬编码值,然后执行INSERT SELECT
insert into t1
select 131309, 'HP', '20-FEB-04',2000000,1235 from dual
union all
select 131310,'HT','20-APR-14',120020,1234 from dual
或者您可以INSERT ALL
insert all
into t1 values(131309,'HP','20-FEB-04',2000000,1235)
into t1 values(131310,'HT','20-APR-14',120020,1234)
select * from dual
就个人而言,我只会使用两个陈述。
虽然这与您的问题无关,但有几条评论
insert
声明中的列。您将使SQL更加健壮,以便在将来添加允许NULL
值的新列时,您的语句仍然有效。当列列表就在那里时,你会避免很多错误,而不是希望有人记得表中列的顺序。date
列,请使用日期而不是表示日期的字符串文字。依赖隐式数据类型转换是许多错误的来源。使用显式to_date
或使用ANSI日期文字。并使用4位数年份。