Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Freeware: Oracle Database Y2K Protection (Part II Rest of Code))
If the code I sent is helpful, please let me know
so I can impress my management (jicbayr_at_ifx.net)
Attachment Number 3
Y2K_EXISTING_TRIGGER_UPGRADE.SQL
SET ECHO OFF
SET LINESIZE 132
SET SERVEROUTPUT On SIZE 1000000
SET FEEDBACK OFF
SET SHOWMODE OFF
SET TERM OFF
SET HEADING OFF
SET LONG 100000
SET ARRAYSIZE 10
--
--
--
spool y2k_trigger_upgrade_code.sql
--
--
DECLARE
--
CURSOR build_date_columns
( table_date_columns sys.dba_tab_columns.table_name%TYPE ) IS SELECT column_name FROM sys.dba_tab_columns WHERE owner = '<OWNER>' AND table_name = table_date_columns AND data_type = 'DATE';--
--------------------------------------------------
------------------------------
CURSOR build_update_columns_string
( table_update_columns sys.dba_trigger_cols.table_name%TYPE, update_of_trigger_name sys.dba_trigger_cols.trigger_name%TYPE ) IS SELECT column_name FROM sys.dba_trigger_cols WHERE table_name = table_update_columns AND trigger_name = update_of_trigger_name AND trigger_owner = '<OWNER>' AND table_owner = trigger_owner AND column_list = 'YES';--
--------------------------------------------------
------------------------------
CURSOR existing_tiggers
( table_with_date sys.dba_tab_columns.table_name%TYPE ) IS SELECT table_name, owner, trigger_name, trigger_type, triggering_event, table_owner, referencing_names, when_clause, status, description, trigger_body FROM sys.dba_triggers WHERE table_name = table_with_date AND owner = '<OWNER>' AND trigger_type = 'BEFORE EACH ROW' AND trigger_name NOT LIKE 'RR_%' ORDER BY table_name;--
--------------------------------------------------
------------------------------
CURSOR tables_with_dates IS
SELECT DISTINCT table_name FROM sys.dba_tab_columns WHERE owner = '<OWNER>' AND data_type = 'DATE';
--------------------------------------------------
------------------------------
-----
----- Variables
-----
--------------------------------------------------
------------------------------
-----
var_beginning_of_line INTEGER;
var_end_of_line INTEGER;
var_length_trigger_string INTEGER;
var_str_column VARCHAR2(1000);
var_str_row VARCHAR2(132); var_trigger_type VARCHAR2(100);--
--------------------------------------------------
------------------------------
--------------------------------------------------
------------------------------
BEGIN
FOR table_loop
IN tables_with_dates
LOOP
DBMS_OUTPUT.PUT_LINE ( '/*' ); DBMS_OUTPUT.PUT_LINE ( '_________________________________________________ ________' || '_______________________' ); DBMS_OUTPUT.PUT_LINE ( '| Name | Date | Comment' ); DBMS_OUTPUT.PUT_LINE ( '_________________________________________________ ________' || '_______________________' ); DBMS_OUTPUT.PUT_LINE ( '| Cribbs | ' || TO_CHAR( SYSDATE, 'DD-MON-YYYY') || ' | Added Y2K protection to date fields' ); DBMS_OUTPUT.PUT_LINE ( '_________________________________________________ ________' || '_______________________' ); DBMS_OUTPUT.PUT_LINE ( '*/' );
--------------------------------------------------
------------------------------
--------
-------- BEGINNING OF TRIGGER'S CODE
--------
--------------------------------------------------
------------------------------
--------------------------------------------------
------------------------------
--------------------------------------------------
------------------------------
--------
'_________________________________________________ ________' || '_______________________' ); DBMS_OUTPUT.PUT_LINE ( '_________________________________________________ ________' || '_______________________' ); DBMS_OUTPUT.PUT_LINE ( 'Beginning of the new outer block to encompass the added Y2K' ); DBMS_OUTPUT.PUT_LINE ( 'conversion code and the original code.' ); DBMS_OUTPUT.PUT_LINE ( '_________________________________________________ ________' || '_______________________' ); DBMS_OUTPUT.PUT_LINE ( '_________________________________________________ ________' || '_______________________' ); DBMS_OUTPUT.PUT_LINE ( '*/' ); DBMS_OUTPUT.PUT_LINE ( 'BEGIN' ); -- Beginning of outer block DBMS_OUTPUT.PUT_LINE ( '/*' ); -- Outer block comment text DBMS_OUTPUT.PUT_LINE ( '_________________________________________________ ________' || '_______________________' ); DBMS_OUTPUT.PUT_LINE ( '_________________________________________________ ________' || '_______________________' ); DBMS_OUTPUT.PUT_LINE ( 'Inserted Y2K conversion code.' ); DBMS_OUTPUT.PUT_LINE ( 'Convert "NEW" date value to be Y2K complaint.' ); DBMS_OUTPUT.PUT_LINE ( '_________________________________________________ ________' || '_______________________' ); DBMS_OUTPUT.PUT_LINE ( '_________________________________________________ ________' || '_______________________' ); DBMS_OUTPUT.PUT_LINE ( '*/' );); -- Beginning of
--------------------------------------------------
------------------------------
--------------------------------------------------
------------------------------
--------
-------- BEGINNING OF THE Y2K CONVERSION BLOCK
--------
--------------------------------------------------
------------------------------
--------------------------------------------------
------------------------------
DBMS_OUTPUT.PUT_LINE ( CHR (9) || 'BEGIN'
FOR date_cols IN build_date_columns ( modification_loop.table_name )
LOOP DBMS_OUTPUT.PUT_LINE ( CHR (9) || ' IF :NEW.' || LOWER( date_cols.column_name ) || ' IS NOT NULL ' ); DBMS_OUTPUT.PUT_LINE ( CHR (9) || ' THEN' ); DBMS_OUTPUT.PUT_LINE ( CHR (9) || ' :NEW.' || LOWER( date_cols.column_name ) || ' := ' || 'rr_date_conversion( :NEW.' || LOWER( date_cols.column_name ) || ' );' ); DBMS_OUTPUT.PUT_LINE ( CHR (9) || ' END IF;' ); DBMS_OUTPUT.PUT_LINE ( '--' ); END LOOP;
--------
'_________________________________________________ ________' || '_______________________' ); DBMS_OUTPUT.PUT_LINE ( '_________________________________________________ ________' || '_______________________' ); DBMS_OUTPUT.PUT_LINE ( 'Beginning of original code.' ); DBMS_OUTPUT.PUT_LINE ( '_________________________________________________ ________' || '_______________________' ); DBMS_OUTPUT.PUT_LINE ( '_________________________________________________ ________' || '_______________________' ); DBMS_OUTPUT.PUT_LINE ( '*/' );modification_loop.trigger_body );
--------------------------------------------------
------------------------------
--------------------------------------------------
------------------------------
--------
-------- ORIGINAL TRIGGER CODE
--------
--------------------------------------------------
------------------------------
--------------------------------------------------
------------------------------
var_beginning_of_line := 1; var_end_of_line := 0; var_length_trigger_string := LENGTH (
WHILE var_end_of_line <
var_length_trigger_string
LOOP
modification_loop.trigger_body,
CHR( 10 ), var_beginning_of_line );
modification_loop.trigger_body,
var_beginning_of_line,
var_end_of_line - var_beginning_of_line );
--------------------------------------------------
------------------------------
SELECT NULL INTO var_str_row FROM
DUAL;
var_beginning_of_line :=
var_end_of_line + 1;
END LOOP;
'_________________________________________________ ________' || '_______________________' ); DBMS_OUTPUT.PUT_LINE ( '_________________________________________________ ________' || '_______________________' ); DBMS_OUTPUT.PUT_LINE ( 'End of the new outer block to encompass the inserted Y2K' ); DBMS_OUTPUT.PUT_LINE ( 'date conversion code and the original code.' ); DBMS_OUTPUT.PUT_LINE ( '_________________________________________________ ________' || '_______________________' ); DBMS_OUTPUT.PUT_LINE ( '_________________________________________________ ________' || '_______________________' ); DBMS_OUTPUT.PUT_LINE ( '*/' ); DBMS_OUTPUT.PUT_LINE ( 'END;' ); DBMS_OUTPUT.PUT_LINE ( '/' ); -- Trigger's terminating slash END LOOP;
END LOOP;
ROLLBACK;
END;
.
/
--
--
SPOOL OFF
--
SET ARRAYSIZE 15
SET LONG 80
SET SERVEROUTPUT OFF
SET FEEDBACK On
SET SHOWMODE On
SET TERM On
SET HEADING On
SET ECHO On
Sent via Deja.com http://www.deja.com/
Share what you know. Learn what you don't.
Received on Tue Jun 22 1999 - 16:57:21 CDT