【问题标题】:What's wrong with this piece of sql query where i am trying to add multiple record in a table?我试图在表中添加多条记录的这段 sql 查询有什么问题?
【发布时间】:2018-12-25 19:00:08
【问题描述】:
INSERT ALL
INTO Emp(EmpID,EmpName,Loc,DESIGNATION,DeptID,Sal,HireDate,MgrID)
VALUES
(102,'Matt','Mumbai','Developer',1022,80000,'10-APR-1991',NULL),
(103,'Jhon','Banglore','Supervisor',1011,75000,'26-MAR-1986',102),
(104,'David','Hyderbad','Clerk',1033,40000,103),
(105,'Paul','Banglore','Clerk',1011,35000,103),
(106,'Jones','Mumbai','Developer',1022,85000,NULL)
SELECT * FROM DUAL;

第 4 行出现错误:ORA-00928:缺少 SELECT 关键字

我正在使用 Oracle 11g

【问题讨论】:

  • 如果要插入单个表,为什么要使用INSERT ALL 语句开头?即用一条语句插入多个表中。

标签: sql oracle oracle11g


【解决方案1】:

您需要为每个VALUES 指定INTO 部分:

INSERT ALL
 INTO Emp(EmpID,EmpName,Loc,DESIGNATION,DeptID,Sal,HireDate,MgrID) 
   VALUES (102,'Matt','Mumbai','Developer',1022,80000,'10-APR-1991',NULL)
 INTO Emp(EmpID,EmpName,Loc,DESIGNATION,DeptID,Sal,HireDate,MgrID) 
   VALUES (103,'Jhon','Banglore','Supervisor',1011,75000,'26-MAR-1986',102)
 INTO Emp(EmpID,EmpName,Loc,DESIGNATION,DeptID,Sal,HireDate,MgrID) 
   VALUES (104,'David','Hyderbad','Clerk',1033,40000,SYSDATE,103) 
 INTO Emp(EmpID,EmpName,Loc,DESIGNATION,DeptID,Sal,HireDate,MgrID) 
   VALUES (105,'Paul','Banglore','Clerk',1011,35000,SYSDATE,103)
 INTO Emp(EmpID,EmpName,Loc,DESIGNATION,DeptID,Sal,HireDate,MgrID) 
   VALUES  (106,'Jones','Mumbai','Developer',1022,85000,SYSDATE,NULL) 
SELECT * FROM DUAL;
-- Rows 3-5 does not have HireDate so I inserted SYSDATE

db<>fiddle demo

【讨论】:

    【解决方案2】:

    Oracle 不允许使用values 进行多行插入。我认为最简单的方法是select . . . union all

    INSERT INTO Emp(EmpID,EmpName,Loc,DESIGNATION,DeptID,Sal,HireDate,MgrID)
        SELECT 102,'Matt','Mumbai','Developer',1022,80000,'10-APR-1991',NULL FROM DUAL UNION ALL
        SELECT 103,'Jhon','Banglore','Supervisor',1011,75000,'26-MAR-1986',102 FROM DUAL UNION ALL
        SELECT 104,'David','Hyderbad','Clerk',1033,40000,103 FROM DUAL UNION ALL
        SELECT 105,'Paul','Banglore','Clerk',1011,35000,103 FROM DUAL UNION ALL
        SELECT 106,'Jones','Mumbai','Developer',1022,85000,NULL FROM DUAL ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-15
      • 2010-10-21
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2014-06-28
      相关资源
      最近更新 更多