我创建了一个表Oracle SQL:
create table t1
(
empno number(6) PRIMARY KEY,
empname varchar(30),
hiredate date,
basic number(8),
deptno number(4)
);
Run Code Online (Sandbox Code Playgroud)
现在我使用单个查询将值插入表中:
insert into t1 values((131309,'HP','20-FEB-04',2000000,1235)
(131310,'HT','20-APR-14',120020,1234));
Run Code Online (Sandbox Code Playgroud)
但这显示错误:
insert into t1 values((131309,'HP','20-FEB-04',2000000,1235),
*
ERROR at line 1:
ORA-00907: missing right parenthesis
Run Code Online (Sandbox Code Playgroud)
我该如何纠正?
Jus*_*ave 15
一个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);
Run Code Online (Sandbox Code Playgroud)
如果你真的想,你可以选择你的硬编码值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
Run Code Online (Sandbox Code Playgroud)
或者你可以做一个 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
Run Code Online (Sandbox Code Playgroud)
就个人而言,我只使用两个陈述.
虽然这与您的问题无关,但有几条评论
insert语句中的列.您将使SQL更加健壮,以便在将来添加允许NULL值的新列时,您的语句仍然有效.当列列表就在那里时你会避免很多错误,而不是希望有人记住表中列的顺序.date列,请使用日期而不是表示日期的字符串文字.依赖隐式数据类型转换是许多错误的来源.使用显式to_date或使用ANSI日期文字.并使用4位数年份.