#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