Oracle ORA-32462:无法使用在当前事务中修改的对象

Oracle ORA-32462:无法使用在当前事务中修改的对象,oracle,oracle18c,Oracle,Oracle18c,注意:这在Oracle 18c中 有一个insert发生在temp1表上,然后我在这个insert语句之后调用一个子存储过程。在这个存储过程中,我创建了一个临时表,使用这个“temp1”表,如下所示: Insert into temp1(name, dept, date) values ('A','HR',sysdate); CREATE PRIVATE TEMPORARY TABLE ora$pgtt as select dept from temp1 where dept ='HR'

注意:这在Oracle 18c中

有一个insert发生在temp1表上,然后我在这个insert语句之后调用一个子存储过程。在这个存储过程中,我创建了一个临时表,使用这个“temp1”表,如下所示:

Insert into temp1(name, dept, date) values ('A','HR',sysdate);

CREATE PRIVATE TEMPORARY TABLE ora$pgtt
 as
 select dept from temp1 where dept ='HR' and name ='A';
但我得到了一个错误:

ORA-32462:无法使用在当前事务中修改的对象


不能访问活动事务中间的对象,作为私有临时表创建的源。你需要结束交易

SQL> create table temp1 ( name varchar2(10), dept varchar2(10), d date );

Table created.

SQL> Insert into temp1(name, dept, d) values ('A','HR',sysdate);

1 row created.

SQL>
SQL> CREATE PRIVATE TEMPORARY TABLE ORA$PTT_tab
  2   as
  3   select dept from temp1 where dept ='HR' and name ='A';
 select dept from temp1 where dept ='HR' and name ='A'
                  *
ERROR at line 3:
ORA-32462: cannot use an object modified in current transaction



SQL> Insert into temp1(name, dept, d) values ('A','HR',sysdate);

1 row created.

SQL> commit;

Commit complete.

SQL>
SQL> CREATE PRIVATE TEMPORARY TABLE ORA$PTT_tab as
  2  select dept from temp1 where dept ='HR' and name ='A';

Table created.

不能访问活动事务中间的对象,作为私有临时表创建的源。你需要结束交易

SQL> create table temp1 ( name varchar2(10), dept varchar2(10), d date );

Table created.

SQL> Insert into temp1(name, dept, d) values ('A','HR',sysdate);

1 row created.

SQL>
SQL> CREATE PRIVATE TEMPORARY TABLE ORA$PTT_tab
  2   as
  3   select dept from temp1 where dept ='HR' and name ='A';
 select dept from temp1 where dept ='HR' and name ='A'
                  *
ERROR at line 3:
ORA-32462: cannot use an object modified in current transaction



SQL> Insert into temp1(name, dept, d) values ('A','HR',sysdate);

1 row created.

SQL> commit;

Commit complete.

SQL>
SQL> CREATE PRIVATE TEMPORARY TABLE ORA$PTT_tab as
  2  select dept from temp1 where dept ='HR' and name ='A';

Table created.

如果在当前事务中修改了CTAS语句中的表,则不允许在该语句中使用该表

您可以遵循错误描述中提供的建议:

32462,0000,无法使用在当前事务中修改的对象 //*原因:在创建过程中发现在当前事务中修改的对象 //内存中使用CREATETABLE作为SELECT CTA的专用临时表。 //*操作:将CTAS语句拆分为CREATE TABLE,然后插入SELECT

创建表temp1 name varchar2 32,dept varchar2 4,雇用日期; 在temp1中插入值“A”、“HR”和“sysdate”; 创建专用临时表ora$ptt_1作为 从temp1中选择*,其中dept='HR'和name='A'; 错误报告- ORA-32462:无法使用在当前事务中修改的对象 此时请注意,在这种特殊情况下,语句CREATE PRIVATE TEMPORARY。。。不像通常所有其他DDL语句那样发出隐式提交。请在其他会话中尝试:

从temp1中选择*; 未选择任何行 回到第一届会议:

创建私有临时表ora$ptt_1 name varchar2 32,dept varchar2 4,租用日期; 已创建专用临时文件。 插入ora$ptt_1 从temp1中选择*,其中dept='HR'和name='A'; 插入1行。
如果在当前事务中修改了CTAS语句中的表,则不允许在该语句中使用该表

您可以遵循错误描述中提供的建议:

32462,0000,无法使用在当前事务中修改的对象 //*原因:在创建过程中发现在当前事务中修改的对象 //内存中使用CREATETABLE作为SELECT CTA的专用临时表。 //*操作:将CTAS语句拆分为CREATE TABLE,然后插入SELECT

创建表temp1 name varchar2 32,dept varchar2 4,雇用日期; 在temp1中插入值“A”、“HR”和“sysdate”; 创建专用临时表ora$ptt_1作为 从temp1中选择*,其中dept='HR'和name='A'; 错误报告- ORA-32462:无法使用在当前事务中修改的对象 此时请注意,在这种特殊情况下,语句CREATE PRIVATE TEMPORARY。。。不像通常所有其他DDL语句那样发出隐式提交。请在其他会话中尝试:

从temp1中选择*; 未选择任何行 回到第一届会议:

创建私有临时表ora$ptt_1 name varchar2 32,dept varchar2 4,租用日期; 已创建专用临时文件。 插入ora$ptt_1 从temp1中选择*,其中dept='HR'和name='A'; 插入1行。
您可能需要禁用并行DMLI无法在我的过程中使用alter命令。另外,我注意到我的insert在这里提交时没有任何提交,并且在异常之后,它也被插入到数据库中。您可能需要禁用并行DMLI无法在我的过程中使用alter命令。此外,我注意到我的insert在这里提交而没有任何提交,在异常之后,它也被插入到DB中