2014-09-05 37 views
4

Oracle SQL创建的表插入多行:如何在同一个表的Oracle 10g

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

可能是[在Oracle中执行多行插入的最佳方式?](https://stackoverflow.com/questions/39576)的副本。 – Bass 2017-05-19 12:58:28

回答

10

一个INSERT VALUES声明总是插入一行。如果要插入具有硬编码值的多行,最常见的方法就是执行两个单独的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位数年份。
+0

全部插入 * 错误在第1行: ORA-00001:唯一约束(SCOTT.SYS_C005813)违反 – h8pathak 2014-09-05 07:02:36

+1

'SYS_C005813'是您的主键约束吗?如果是这样,那就意味着你已经在't1'中有一行,并且至少有一个你试图插入的'empno'值。无论您如何尝试插入行,都会遇到该错误。 – 2014-09-05 07:04:11