В то время как INSERT получил ошибку PLS-00904: stud.col3 неверный идентификатор - PullRequest
0 голосов
/ 27 мая 2018

В моей хранимой процедуре я хочу, чтобы значение col1 & col2 совпадало с сотрудником, а затем вставлял уникальную запись сотрудника.Если не найдено, сопоставьте значение col1 , col2 & col3 с соответствием employee , затем введите значение,Если также не найдено при совпадении всех этих столбцов, вставьте запись, используя другой столбец.

Также еще одна вещь, которую я хочу найти список значений, таких как emp_id , передав значение другого столбца иесли отдельная запись не может совпадать , тогда сделайте emp_id как NULL .

Также я хочу вставить одну запись за раз после совпадения с txt вместе с другими таблицами, имеющими такие данные, как emp .

create or replace procedure sp_ex
as
    cursor c1 is select * from txt%rowtype;
    v_col1 tbl1.col1%type;
    type record is table of txt%rowtype;  --Staging table
    v_rc record := record();
begin
    open c1;
    loop 
        fetch c1 bulk collect into v_rc limit 1000;

        loop
            for i in 1..v_rc.count loop
                select col1 into v_col1 from tbl1
                where  exists (select col1 from tbl1 where tbl1.col1 = emp.col1);

                insert 
                    when txt.col1 = emp.col1 and txt.col2 = stud.col2 then
                         into main_table(columns) values(v_rc(i).col1, ...)

                    when txt.col1 = emp.col1 and txt.col2 = stud.col2 and txt.col3 = stud.col3 then 
                         into main_table(columns) values(v_rc(i).col1, ...)

                    else 
                         insert into main_table(columns) values(v_rc(i).col1, ...)
                         select * from txt;
                end loop;
                exit when v_rc.count < limit;

        end loop;
        close c1;
end sp_ex;

В то время как emp , stud различнытаблицы, где я должен соответствовать с txt .В этом сохраненном процессе я хочу загрузить данные из txt в main_table в режиме пакетной обработки.Данные будут сопоставляться по одной записи, затем после, если совпадающие условия совпадают, затем загружаться в основную таблицу.Как я могу создать хранимый процесс, чтобы данные загружались вышеупомянутой логикой один за другим в пакетной обработке.Не могли бы вы помочь мне поделиться своей идеей.Спасибо

1 Ответ

0 голосов
/ 27 мая 2018

Синтаксис выглядит довольно запутанным.

Вставка из нескольких таблиц выглядит следующим образом:

insert all  -- alternatively, "insert first"
    when dummy = 'X' then
        into demo (id) values (1)
    when dummy = 'Y' then
        into demo (id) values (2)
    else
        into demo (id) values (3)
select * from dual;

Или, возможно, вы хотели PL/ SQL case оператор :

case
    when dummy = 'X' then
        insert into demo (id) values (1);
    when dummy = 'Y' then
        insert into demo (id) values (2);
    else
        insert into demo (id) values (3);
end case;

Вместо этого, кажется, есть смесь двух.

Также есть отсутствующий end loop и неявный курсор (select col1 from tbl1) без оговорки into.

...