如何在同一个表中插入多行 - Oracle 10g

h8p*_*hak 6 sql oracle rdbms

我创建了一个表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位数年份.