我有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;
查询运行正常,此查询的输出正常:
因此,我想使用以下命令将这些数据插入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
为什么会出现此错误?我查看并发现select语句的列和值的数据类型相同。由于列数据类型匹配,因此不会出现此错误。
答案 0 :(得分:2)
您的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;
干杯!