Как подойти к проблеме ошибок в Oracle PL/SQL?

#sql #oracle

Вопрос:

вот мой код

 begin
    open vcursor;
    loop
        fetch vcursor into v1, v2, v3, v4;
        exit when vcursor%notfound;
        dbms_output.PUT_LINE('hello');
        insert into tblproject
        select seq_tblproject.nextval, t5.SUBJECTNAME || 'project', T3.SUBJECTEND, t1.TEAMSEQ
        into v1, v2, v3, v4
        from tblteam t1
                 inner join TBLCLASS t2 on t1.CLASSSEQ = t2.CLASSSEQ
                 inner join TBLOPENCOURSE T on T.OPENCOURSESEQ = t2.OPENCOURSESEQ
                 inner join TBLOPENSUBJECT T3 on T.OPENCOURSESEQ = T3.OPENCOURSESEQ
                 inner join TBLAVAILABLESUBJECT T4 on T4.AVAILABLESUBJECTSEQ = T3.AVAILABLESUBJECTSEQ
                 inner join TBLSUBJECT T5 on T5.SUBJECTSEQ = t4.SUBJECTSEQ
        where (v1, v2) in (
            select distinct t5.SUBJECTSEQ, t1.TEAMNAME
            from tblteam t1
                     inner join TBLCLASS t2 on t1.CLASSSEQ = t2.CLASSSEQ
                     inner join TBLOPENCOURSE T on T.OPENCOURSESEQ = t2.OPENCOURSESEQ
                     inner join TBLOPENSUBJECT T3 on T.OPENCOURSESEQ = T3.OPENCOURSESEQ
                     inner join TBLAVAILABLESUBJECT T4 on T4.AVAILABLESUBJECTSEQ = T3.AVAILABLESUBJECTSEQ
                     inner join TBLSUBJECT T5 on T5.SUBJECTSEQ = t4.SUBJECTSEQ);
--         dbms_output.PUT_LINE(a || ',' || b|| ',' ||c|| ',' ||d);

        dbms_output.PUT_LINE(v1);
        dbms_output.PUT_LINE(v2);
        dbms_output.PUT_LINE(v3);
        dbms_output.PUT_LINE(v4);
    end loop;
end;
 

Я хочу выполнить отладку с выводом СУБД.

 [65000][6550] 
ORA-06550: line 23, column 9: 
PL/SQL: ORA-01744: 
inappropriate INTO ORA-06550: line 21, column 9: 
PL/SQL: SQL Statement ignored
 

Появляется такая ошибка.

Было подтверждено, что ввод 4 значений во вставку в нормально работает с другим кодом. Но это расстраивает, потому что сейчас это не работает в этом коде.

Как я должен подойти к решению этой проблемы? Версия Oracle-11.g.

с уважением

с уважением

Комментарии:

1. Вы получаете ошибку компиляции. dbms_output это то, что вы вызываете во время выполнения. Вы не можете использовать dbms_output для отладки ошибки компиляции. Используйте show errors или запросите user_errors , чтобы увидеть ошибки компиляции. Я не знаю, что вы хотите сделать с insert ... select ... into заявлением. У вас может быть insert ... select приложение, которое вставляет в целевую таблицу результаты исходного select оператора. У вас может быть select into функция, которая выделяет одну строку данных в скалярные переменные. Нет смысла пытаться объединить эти конструкции.

Ответ №1:

SELECT INTO У вас перепутаны оператор и оператор in INSERT , и это вызывает эту ошибку. Заявление, начинающееся с

 insert into tblproject
 

и заканчивается здесь

   inner join TBLSUBJECT T5 on T5.SUBJECTSEQ = t4.SUBJECTSEQ);
 

является оператором insert. Удалите линию into v1, v2, v3, v4 , и она будет работать.
Вы не можете выполнить a SELECT INTO в середине инструкции insert. Отсюда и ошибка ORA-01744: inappropriate INTO