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

时间:2014-09-05 06:38:47

标签: sql oracle rdbms

我在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

我该如何纠正?

1 个答案:

答案 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位数年份。