我创建了一个存储过程。在那个存储过程中我想要的是 col1 & col2 与员工匹配,然后插入员工的唯一记录。如果未找到,则匹配 col1 , col2 &的值 col3 与 员工 匹配,然后插入值。如果在匹配所有这些列时也找不到,则使用另一列插入记录。 还有一件事我需要通过传递另一个列值找到像 emp_id 这样的值列表,如果单个记录不能匹配,那么make emp_id as NULL 。
create or replace procedure sp_ex
AS
empID_in varchar2(10);
fname_in varchar2(20);
lname_in varchar2(30);
---------
type record is ref cursor return txt%rowtype; --Staging table
v_rc record;
rc rc%rowtype;
begin
open v_rc for select * from txt;
loop
fetch v_rc into rc;
exit when v_rc%notfound;
loop
for i in 1..rc.count loop
select col1 from tbl1
Where EXISTS (select col1 from tbl1 where tbl1.col1 = rc.col1);
IF txt.col1 = rc.col1 AND txt.col2 = rc.col2 THEN
insert into main_table select distinct * from txt where txt.col2 = rc.col2;
ELSIF txt.col1 = rc.col1 AND txt.col2 = rc.col2 AND txt.col3 = rc.col3 THEN
insert into main_table select distinct * from txt where txt.col2 = rc.col2;
ELSE
insert into main_table select * from txt where txt.col4 = rc.col4;
end if;
end loop;
end loop;
close v_rc;
end sp_ex;
我在编译此存储过程PLS-00357: Table,View Or Sequence reference not allowed in this context
时发现错误。如何解决此问题以及如何在使用 CASE 或 IF ELSIF 语句时将值从登台插入主表。你能不能帮助我,以便我可以编译存储过程。
答案 0 :(得分:0)
您的代码包含多个错误:
<var> name;
是无效的PL / SQL语法。这应该是
name varchar2(30 char);
类似,
fom
应该是
from
这是非法的:
exit when record%notfound = 0;
您只能在循环内使用exit。此外,语法错误 - 这应该是
exit when record%notfound;
由于rc不是集合,所以:
for i in 1 .. rc.count
也无效。之后我放弃了 - 请修复这些简单的错误并尝试将问题归结为MCVE