Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Redefinition
Julian Dyke
Independent Consultant
Web Version
1
juliandyke.com
Edition-Based Redefinition
Overview
Old Edition
Pre-Upgrade
Cross-Edition
Triggers
Post-Upgrade
New Edition
Schema & Code
Changes
2
juliandyke.com
Edition-Based Redefinition
Life Cycle
Pre-Upgrade
Period before upgrade commences. Only one edition used by every
session
Upgrade
Create a new edition
Upgrade objects and code
juliandyke.com
Edition-Based Redefinition
Editions
juliandyke.com
Edition-Based Redefinition
Editionable Objects
juliandyke.com
Edition-Based Redefinition
Example
juliandyke.com
Edition-Based Redefinition
Example
CONNECT user1/user1
CREATE OR REPLACE PROCEDURE hello IS
BEGIN
dbms_output.put_line ('Version 1');
END;
/
ALTER SESSION SET EDITION = edition2;
CREATE OR REPLACE PROCEDURE hello IS
BEGIN
dbms_output.put_line ('Version 2');
END;
/
ALTER SESSION SET EDITION = ORA$BASE;
EXECUTE hello;
'Version 1'
ALTER SESSION SET EDITION = edition2;
EXECUTE hello;
'Version 2'
juliandyke.com
Edition-Based Redefinition
Editioning Views
Editioning views
New type of view in Oracle 11.2 and above
Logically presents different views of a table across different editions
Use keyword EDITIONING during creation
Can be associated with same types of triggers as base tables
CREATE OR REPLACE EDITIONING VIEW view1
AS SELECT * FROM t1;
juliandyke.com
Edition-Based Redefinition
Cross-Edition Triggers
juliandyke.com
Edition-Based Redefinition
Example
Rename table
CONNECT user1/user1
ALTER TABLE driver RENAME TO driver_;
10
juliandyke.com
Edition-Based Redefinition
Example
11
juliandyke.com
Edition-Based Redefinition
Example
12
juliandyke.com
Edition-Based Redefinition
Example
13
juliandyke.com
Edition-Based Redefinition
Example
In the new edition use the forward trigger to populate the values in the new
columns:
ALTER SESSION SET EDITION = edition2;
DECLARE
c NUMBER := dbms_sql.open_cursor ();
x NUMBER;
BEGIN
dbms_sql.parse
(
c => c,
language_flag => DBMS_SQL.NATIVE,
statement => 'UPDATE driver SET driver_key = driver_key',
apply_crossedition_trigger => 'DRIVER_FORWARD'
);
x := DBMS_SQL.EXECUTE (c);
DBMS_SQL.CLOSE_CURSOR (c);
END;
/
14
juliandyke.com
Edition-Based Redefinition
Example
In the new edition check that the cross edition trigger has fired
ALTER SESSION SET EDITION = edition2;
SELECT driver_first_name, driver_last_name
FROM driver
WHERE driver_key = 'JBUT';
DRIVER_FIRST_NAME
Jenson
15
DRIVER_LAST_NAME
Button
juliandyke.com
Edition-Based Redefinition
Example
In the old edition check that the cross edition trigger has fired
ALTER SESSION SET EDITION = ORA$BASE;
SELECT driver_name
FROM driver
WHERE driver_key = 'JBUT';
DRIVER_NAME
Jenson Button
16
juliandyke.com
Edition-Based Redefinition
Cross-Edition Triggers
17
FOLLOWS clause
May be specified on a FORWARD cross-edition trigger or a non crossedition trigger
Indicates trigger should be executed after a specified trigger
If trigger B specifies trigger A in its FOLLOWS clause then trigger B
executes immediately after trigger A
PRECEDES clause
May only be specified on a REVERSE cross-edition trigger
Indicates trigger should be executed before a specified trigger
If trigger B specifies trigger A in its PRECEDES clause then trigger A
executes immediately after trigger B
juliandyke.com
info@juliandyke.com
18
juliandyke.com