2026-03-12 20:23:15
This commit is contained in:
55
tpt/aot/demo11.sql
Normal file
55
tpt/aot/demo11.sql
Normal file
@@ -0,0 +1,55 @@
|
||||
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
|
||||
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
|
||||
|
||||
-- Bug 12345717 - ORA-600 [13013] or hang/spin from MERGE into table with added column [ID 12345717.8]
|
||||
--
|
||||
-- ORA-600 [13013] can occur when executing a MERGE statement
|
||||
-- with an UPDATE clause into a table which has had an ADD COLUMN
|
||||
-- executed against it with a DEFAULT value with add column
|
||||
-- optimization enabled.
|
||||
--
|
||||
--
|
||||
-- Rediscovery Notes:
|
||||
-- ORA-600 [13013] on a MERGE SQL.
|
||||
-- In some cases this problem can also show up as a spin
|
||||
-- executing a MERGE SQL against a table with an added column.
|
||||
--
|
||||
-- In both cases the problem can occur only if the target table has
|
||||
-- a NOT NULL added column with a default value.
|
||||
-- You can check this with SQL of the form below which shows such columns:
|
||||
-- select owner, object_name, name
|
||||
-- from dba_objects, col$
|
||||
-- where bitand(col$.PROPERTY,1073741824)=1073741824
|
||||
-- and object_id=obj#;
|
||||
--
|
||||
-- Workaround
|
||||
-- Set _add_col_optim_enabled=false before adding columns
|
||||
-- (this can cause the ADD COLUMN DDL to take longer as
|
||||
-- all rows need updating)
|
||||
-- For existing tables set the parameter then rebuild the table
|
||||
-- to remove any existing optimized columns.
|
||||
|
||||
-- DROP TABLE tab1;
|
||||
-- DROP TABLE tab2;
|
||||
|
||||
CREATE TABLE TAB1 ( ID_NACE NUMBER(5) );
|
||||
ALTER TABLE TAB1 ADD (
|
||||
ID_INDUSTRY NUMBER(5) DEFAULT -1 NOT NULL
|
||||
);
|
||||
insert into TAB1 values(1, 1);
|
||||
insert into TAB1 values(2, 2);
|
||||
|
||||
CREATE TABLE TAB2 (
|
||||
ID_NACE NUMBER(5),
|
||||
ID_INDUSTRY NUMBER(5)
|
||||
);
|
||||
insert into TAB2 values(1, 3);
|
||||
commit;
|
||||
|
||||
MERGE /*+ LEADING(c) */
|
||||
INTO TAB1 c
|
||||
USING (SELECT * from TAB2 b) a
|
||||
ON (c.id_nace=a.id_nace)
|
||||
WHEN matched THEN
|
||||
UPDATE SET c.ID_INDUSTRY=a.ID_INDUSTRY;
|
||||
|
||||
Reference in New Issue
Block a user