虽然INSERT收到错误PLS-00357:在此上下文中不允许使用表,视图或序列引用

时间:2018-05-17 10:46:02

标签: oracle stored-procedures plsql case

我创建了一个存储过程。在那个存储过程中我想要的是 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 语句时将值从登台插入主表。你能不能帮助我,以便我可以编译存储过程。

1 个答案:

答案 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