martedì 25 agosto 2009

Package Oracle

Per vedere il corpo dei nostri package dobbiamo verificare prima che versione di Oracle abbiamo installata.

Se si tratta di versioni pari o successive alla nove basta sfruttare il package nativo dbms_metadata. Con questa query riusciamo a ricavare quello che vogliamo:

SQL> select dbms_metadata.get_ddl('PACKAGE', '') from dual;

Se invece abbiamo versioni precedenti alla nove bisogna sfruttare le tabelle all_source :

SQL> desc all_source;
Name Null? Type
--------------------------------- -------- -------------------------------------------------
OWNER VARCHAR2(30)
NAME VARCHAR2(30)
TYPE VARCHAR2(12)
LINE NUMBER
TEXT VARCHAR2(4000)

e fare questa query se si vuole la definizione del package :

SELECT text
FROM all_source
WHERE owner = 'OWNER_PACKAGE'
AND name = 'NOME_PACKAGE'
AND type = 'PACKAGE'
ORDER BY type, line;

e questa se si vuole pure il body:

SELECT text
FROM all_source
WHERE owner = 'OWNER_PACKAGE'
AND name = 'NOME_PACKAGE'
AND type = 'PACKAGE BODY'
ORDER BY type, line;


Si può guardare la descrizione del package semplicemente laciando la funzione desc :

SQL> desc OWNER_PACKAGE.NOME_PACKAGE;

Trigger Oracle

Le principali tabelle che riguardano i TRIGGER sono le seguenti:

user_sequences
user_triggers
all_triggers

ecco le loro descrizioni:

SQL> desc user_triggers
Name Null? Type
--------------------------- -------- -------------------------------------------------
TRIGGER_NAME VARCHAR2(30)
TRIGGER_TYPE VARCHAR2(16)
TRIGGERING_EVENT VARCHAR2(216)
TABLE_OWNER VARCHAR2(30)
BASE_OBJECT_TYPE VARCHAR2(16)
TABLE_NAME VARCHAR2(30)
COLUMN_NAME VARCHAR2(4000)
REFERENCING_NAMES VARCHAR2(128)
WHEN_CLAUSE VARCHAR2(4000)
STATUS VARCHAR2(8)
DESCRIPTION VARCHAR2(4000)
ACTION_TYPE VARCHAR2(11)
TRIGGER_BODY LONG

SQL> desc user_sequences
Name Null? Type
--------------------------- -------- -------------------------------------------------
SEQUENCE_NAME NOT NULL VARCHAR2(30)
MIN_VALUE NUMBER
MAX_VALUE NUMBER
INCREMENT_BY NOT NULL NUMBER
CYCLE_FLAG VARCHAR2(1)
ORDER_FLAG VARCHAR2(1)
CACHE_SIZE NOT NULL NUMBER
LAST_NUMBER NOT NULL NUMBER

SQL> desc all_triggers
Name Null? Type
--------------------------- -------- -------------------------------------------------
OWNER VARCHAR2(30)
TRIGGER_NAME VARCHAR2(30)
TRIGGER_TYPE VARCHAR2(16)
TRIGGERING_EVENT VARCHAR2(216)
TABLE_OWNER VARCHAR2(30)
BASE_OBJECT_TYPE VARCHAR2(16)
TABLE_NAME VARCHAR2(30)
COLUMN_NAME VARCHAR2(4000)
REFERENCING_NAMES VARCHAR2(128)
WHEN_CLAUSE VARCHAR2(4000)
STATUS VARCHAR2(8)
DESCRIPTION VARCHAR2(4000)
ACTION_TYPE VARCHAR2(11)
TRIGGER_BODY LONG


Questa select ci da una panoramica del trigger di nostro interesse:

SQL> SELECT trigger_name, trigger_body from all_triggers where trigger_name = '';

e questa invece ci da lo status:

SQL> select status from all_triggers where trigger_name = 'CUSTOM_CDR_DATA_RTRIG';