В то время как INSERT получил ошибку PLS-00357: ссылка на таблицу, представление или последовательность не разрешена в этом контексте - PullRequest
0 голосов
/ 17 мая 2018

Я создал одну хранимую процедуру . В этом сохраненном процессе я хочу, чтобы значение col1 & col2 соответствовало сотруднику, а затем вставляю уникальную запись сотрудника. Если не найдено, сопоставьте значение col1 , col2 & col3 с соответствием employee , затем введите значение , Если также не найден при совпадении всех этих столбцов, вставьте запись, используя другой столбец. Также еще одна вещь, которую я хочу найти список значений, таких как emp_id , передав значение другого столбца, и если одна запись не может соответствовать , тогда сделайте emp_id как 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 голосов
/ 17 мая 2018

Ваш код содержит несколько ошибок:

<var> name;

недопустимый синтаксис PL / SQL. Вероятно, это должно быть

name varchar2(30 char);

Похоже,

fom

должно быть

from

Это незаконно:

exit when record%notfound = 0;

Вы можете использовать выход только внутри цикла. Кроме того, синтаксис неправильный - это должно быть

exit when record%notfound;

Поскольку rc не является коллекцией, это:

for i in 1 .. rc.count 

также недействительно. Я сдался после этого - пожалуйста, исправьте эти простые ошибки и попробуйте свести вашу проблему к MCVE

...