Ошибка при создании временной таблицы "ORA-32462: cannot use an object modified in current transaction"
Делаю одну вставку в таблицу temp1. Сразу после вставки вызываю процедуру, в которой создаю PTT (приватную временную таблицу - private temporary table).
При создании используeтся таблицa temp1, вот так:
insert into temp1(name, dept, date) values ('A','HR',sysdate);
create private temporary table ora$ptt_1 as
select * from temp2 where dept ='HR' and name ='A';
Но получаю ошибку:
ORA-32462: cannot use an object modified in current transaction
Что делаю не так, как обойти ошибку?
Свободный перевод ORA-32462: cannot use an object modified in current transaction от участника @ManojSrivastava
Ответы (1 шт):
Нельзя использовать таблицу для создания PTT, которая была изменена в текушей транзакции.
Так как, время жизни PTT по умолчанию транзакция, то в данном случае есть исключение из правила: перед выполнением CREATE PRIVATE TEMPORARY ... не будет произведён неявный COMMIT, что обычно имеет место для всех DDL.
Поэтому, как и предлагается в описании ошибки:
32462, 0000, "cannot use an object modified in current transaction"
// *Cause: An object modified in the current transaction was found during the creation of
// in-memory private temporary table using CREATE TABLE AS SELECT (CTAS).
// *Action: Split the CTAS statement into CREATE TABLE followed by INSERT SELECT.
Сначала создайте PTT таблицу, затем заполните её отдельной вставкой:
create table temp1 (name varchar2 (32), dept varchar2 (4), hired date);
insert into temp1 values ('A', 'HR', sysdate);
create private temporary table ora$ptt_1 as
select * from temp1 where dept ='HR' and name ='A';
Error report -
ORA-32462: cannot use an object modified in current transaction
create private temporary table ora$ptt_1 (name varchar2 (32), dept varchar2 (4), hired date);
Private TEMPORARY created.
insert into ora$ptt_1
select * from temp1 where dept ='HR' and name ='A';
1 row inserted.