2014-09-05 61 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