ORA-00904: неверный идентификатор при использовании forall
Когда я запускаю следующий блок, я получаю сообщение об ошибке:
ORA-00904: Invalid identifier in "forall".
Может кто-нибудь помочь мне исправить это?
Столбец "ID" представляет собой идентификационный столбец 12c, поэтому число.
drop table t1 cascade constraints purge;
create table t1 (
c1 number
);
set serveroutput on;
declare
type l_t2 is table of number;
l_c1 l_t2;
begin
select ID
bulk collect into l_c1
from IDTABLE;
dbms_output.put_line('Number of records: ' || sql%rowcount);
forall i in l_c1.first..l_c1.last
insert into t1 values l_c1(i);
end;
/
1 ответ
Решение
Вам не хватает скобок вокруг ссылки на таблицу PL/SQL в предложении values. Измените эту строку:
insert into t1 values l_c1(i);
в
insert into t1 values (l_c1(i));
Без них думает l_cl
объект уровня схемы какого-то рода, которого не существует; отсюда и ошибка, которую вы видите. С ними это работает:
set serveroutput on;
declare
type l_t2 is table of number;
l_c1 l_t2;
begin
select ID bulk collect into l_c1 from IDTABLE;
dbms_output.put_line('Number of records: ' || sql%rowcount);
forall i in l_c1.first..l_c1.last
insert into t1 values (l_c1(i));
end;
/
PL/SQL procedure successfully completed.
Number of records: 2