簡體   English   中英

使用 INSERT INTO.. SELECT * FROM 時,INSERT into 語句在 oracle 中不起作用

[英]INSERT into statement not working in oracle when using INSERT INTO .. SELECT * FROM

我有vh_emp表,其表結構為(這是空表):

在此處輸入圖像描述

我正在從employee表中獲取數據作為源表,我在其中編寫了一些查詢以匹配 vh_emp 表:

SELECT e.emp_id       EMP_ID, 
       e.emp_name     EMP_NAME, 
       e.dob          DOB, 
       e.join_date    JOIN_DATE, 
       CASE 
         WHEN e.leave_date IS NULL THEN Trunc(sysdate) 
         ELSE e.leave_date 
       END            AS LEAVE_DATE, 
       e.salary / 100 SALARY, 
       d.dept_name    DEPT_NAME, 
       one.addr_name  ADDRESS_ONE, 
       two.addr_name  ADDRESS_TWO, 
       b.emp_name     AS MANAGER_NAME 
FROM   offc.employee e 
       LEFT JOIN offc.department d 
              ON e.dept_id = d.dept_id 
       LEFT JOIN offc.add_line_one one 
              ON e.line1 = one.addr_id_one 
       LEFT JOIN offc.add_line_two two 
              ON e.line2 = two.addr_id_two 
       LEFT OUTER JOIN (SELECT * 
                        FROM   offc.employee) b 
                    ON e.manager_id = b.emp_id; 

查詢運行良好,並且 output 從此查詢運行良好:

在此處輸入圖像描述

所以,我想使用以下方法將這些數據插入vh_emp表中:

INSERT INTO offc.vh_emp 
            (emp_id, 
             emp_name, 
             dob, 
             join_date, 
             leave_date, 
             address_one, 
             address_two, 
             salary, 
             manager_name, 
             dept_name) 
SELECT e.emp_id       EMP_ID, 
       e.emp_name     EMP_NAME, 
       e.dob          DOB, 
       e.join_date    JOIN_DATE, 
       CASE 
         WHEN e.leave_date IS NULL THEN Trunc(sysdate) 
         ELSE e.leave_date 
       END            AS LEAVE_DATE, 
       e.salary / 100 SALARY, 
       d.dept_name    DEPT_NAME, 
       one.addr_name  ADDRESS_ONE, 
       two.addr_name  ADDRESS_TWO, 
       b.emp_name     AS MANAGER_NAME 
FROM   offc.employee e 
       LEFT JOIN offc.department d 
              ON e.dept_id = d.dept_id 
       LEFT JOIN offc.add_line_one one 
              ON e.line1 = one.addr_id_one 
       LEFT JOIN offc.add_line_two two 
              ON e.line2 = two.addr_id_two 
       LEFT OUTER JOIN (SELECT * 
                        FROM   offc.employee) b 
                    ON e.manager_id = b.emp_id; 

但是,我執行了這個查詢我得到了錯誤:

ORA-01722: invalid number

employee的結構是: 在此處輸入圖像描述

為什么會出現這個錯誤? 我查看並看到 select 語句的列和值的數據類型相同。由於列數據類型匹配,因此不應出現此錯誤。

您的insert子句列名和select子句列名的順序應該匹配。

請將它們的位置匹配如下:

INSERT INTO offc.vh_emp 
            (emp_id, 
             emp_name, 
             dob, 
             join_date, 
             leave_date, 
             Salary,  -- this
             dept_name, -- this
             address_one, 
             address_two,
             manager_name 
             ) 
SELECT e.emp_id       EMP_ID, 
       e.emp_name     EMP_NAME, 
       e.dob          DOB, 
       e.join_date    JOIN_DATE, 
       CASE 
         WHEN e.leave_date IS NULL THEN Trunc(sysdate) 
         ELSE e.leave_date 
       END            AS LEAVE_DATE, 
       e.salary / 100 SALARY, 
       d.dept_name    DEPT_NAME, 
       one.addr_name  ADDRESS_ONE, 
       two.addr_name  ADDRESS_TWO, 
       b.emp_name     AS MANAGER_NAME 
FROM   offc.employee e 
       LEFT JOIN offc.department d 
              ON e.dept_id = d.dept_id 
       LEFT JOIN offc.add_line_one one 
              ON e.line1 = one.addr_id_one 
       LEFT JOIN offc.add_line_two two 
              ON e.line2 = two.addr_id_two 
       LEFT OUTER JOIN (SELECT * 
                        FROM   offc.employee) b 
                    ON e.manager_id = b.emp_id; 

干杯!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM