我创建了一个存储过程。在那个存储过程中我想要的是 col1 & col2 与员工匹配,然后插入员工的唯一记录。如果未找到,则匹配 col1 , col2 &的值 col3 与 员工 匹配,然后插入值。如果在匹配所有这些列时也找不到,则使用另一列插入记录。 还有一件事我需要通过传递另一个列值找到像 emp_id 这样的值列表,如果单个记录不能匹配,那么make emp_id as NULL 。
CREATE OR REPLACE PROCEDURE sp_ex
AS
---------
TYPE rec IS TABLE OF txt%ROWTYPE; --Staging table
v_rec rec := rec ();
v_col1 tbl1.col1%TYPE;
BEGIN
SELECT *
BULK COLLECT INTO v_rec
FROM txt;
FOR i IN v_rec.FIRST .. v_rec.LAST
LOOP
SELECT col1
INTO v_col1
FROM tbl1
WHERE EXISTS
(SELECT col1
FROM tbl1
WHERE tbl1.col1 = v_rec(i).col1);
INSERT WHEN txt.col1 = v_rec(i).col1 AND txt.col2 = v_rec(i).col2
THEN
INTO main_table(col1, ....)
values(v_rec(i).col1, ....)
WHEN txt.col1 = v_rec(i).col1 AND txt.col2 = v_rec(i).col2
AND txt.col3 = v_rec(i).col3
THEN
INTO main_table(col1, ....)
values(v_rec(i).col1, ....)
ELSE
INTO main_table(col1, ....) values(v_rec(i).col1, ....)
SELECT *
FROM txt
WHERE txt.col4 = v_rec.col4;
END LOOP;
END sp_ex;
tbl1 中的 col1 和 txt 中的 col1 都不同。
我在编译此存储过程ORA-00904: "txt.col3" INVALID identifier
时发现错误。如何解决此问题以及如何在使用 CASE 或 IF ELSIF 语句时将值从登台插入主表。你能不能帮助我,以便我可以编译存储过程。