小编典典

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

sql

我在中创建了一个表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

我该如何纠正?


阅读 149

收藏
2021-03-23

共1个答案

小编典典

一条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位数字的年份。
2021-03-23