错误:ORA-12838:在并行修改对象后,无法读取/修改对象。当然,提交删除会破坏目的。
是否有一种方法可以使用未提交的删除,然后插入,以便在出现问题时回滚,例如。插入写?
代码:
DECLARE
tbl_count number;
sql_stmt long;
BEGIN
SELECT
COUNT(*)
INTO
tbl_count
FROM
ALL_TABLES
WHERE
table_name = 'XXX';
IF(tbl_count <= 0) THEN
sql_stmt:=
'CREATE TABLE XXX (
AA varchar2(255),
BB DATE
)';
EXECUTE IMMEDIATE sql_stmt;
END IF;
END;
BEGIN
EXECUTE IMMEDIATE 'DELETE FROM XXX';
INSERT INTO
XXX
SELECT
"AA",
TO_DATE("BB",'YYYY-MM-DD') AS BB
FROM
"XXX_STG";
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
RAISE;
END;
它在概念上还没有意义,将感谢一些帮助/想法。
1条答案
按热度按时间wsxa1bj11#
ORA-12838与事务本身无关,但与使用 parallel dml修改表有关。如果您不使用并行DML,那么您可以在同一事务中执行DELETE-then-INSERT,而不会出现任何问题。
如果您希望保持并行处理,并且还保留已删除行的记录“以防万一”,可以执行以下操作
这项限制在23 c btw取消。