Cum putem extrage orice definiția a unui obiect în Oracle

Uneori, când nu au acces la instrumente precum PL/SQL Developer sau orice alt GUI care te poate ajuta a se vedea definiția unei anumite obiecte se poate folosi (funcția GET_DDL) din DBMS_METADATA pachet metadate. Acest articol poate fi ușor pentru uni de DBA dar va ajuta cu siguranța noi viniti în lume bancilor de date. voi începe să vorbesc despre DBMS_METADATA și GET_DDL() utilizarea și sintaxa de bază. DBMS_METADATA - pachet oferă o modalitate de a prelua metadate din XML în dicționarul bazei de date sau crearea DDL și să prezinte XML pentru a re-crea obiectul. GET_DDL() - funcție ne permite pentru a extrage DDL pentru o creație obiect. Sintaxă:

select DBMS_METADATA.GET_DDL('TABLE','<table_name>') from DUAL;
Sintaxa completă cu toate argumentele și opțiuni care pot fi folosite:
DBMS_METADATA.GET_DDL (
object_type     IN VARCHAR2,
name            IN VARCHAR2,
schema          IN VARCHAR2 DEFAULT NULL,
version         IN VARCHAR2 DEFAULT 'COMPATIBLE',
model           IN VARCHAR2 DEFAULT 'ORACLE',
transform       IN VARCHAR2 DEFAULT 'DDL')
RETURN CLOB;
Putem extrage definirea următoarelor obiecte utilizând funcția GET_DDL: TABLE,INDEXES,CONSTRAINT,CONTEXT,DB_LINK,ROLES,DIMENSION,DIRECTORY,FUNCTION,INDEXTYPE,JAVA_SOURCE,LIBRARY,MATERIALIZED_VIEW,OBJECT_GRANT,PACKAGE,PACKAGE_SPEC,PACKAGE_BODY,PROCEDURE,PROFILE,SEQUENCE,SYNONYM,TRIGGER,USER,VIEW,TYPE_BODY,TYPE,TABLESPACE,.... Exemple de modul în care putem folosi funcția GET_DDL pentru a extrage definiția obiectului: Nota: -în timp ce lucrează cu sqlplus trebuie să setați opțiunea set pagesize și set long cu valori ca mai jos.
set pagesize 0
set long 1200
  • Extrage Definiția unei Tabele
  • SQL> set pagesize 0
    SQL> set long 1200
    SQL> select DBMS_METADATA.GET_DDL('TABLE','AW$') from DUAL;
    
      CREATE TABLE "SYS"."AW$"
       (    "AWNAME" VARCHAR2(30),
            "OWNER#" NUMBER NOT NULL ENABLE,
            "AWSEQ#" NUMBER NOT NULL ENABLE,
            "VERSION" NUMBER DEFAULT null,
            "OIDS" NUMBER(10,0) DEFAULT null,
            "OBJS" NUMBER(10,0) DEFAULT null,
            "DICT" RAW(8) DEFAULT null,
            "RSYGEN" NUMBER DEFAULT null
       ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
     NOCOMPRESS LOGGING
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
      BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
      TABLESPACE "SYSTEM"
  • Extrage Definiția unui INDEX
  • SQL> set pagesize 0
    SQL> set long 1200
    SQL> select DBMS_METADATA.GET_DDL('INDEX','I_TS#') from DUAL;
    
      CREATE INDEX "SYS"."I_TS#" ON CLUSTER "SYS"."C_TS#"
      PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
      BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
      TABLESPACE "SYSTEM"
  • Extrage o Definiția unei SEQUENCE
  • SQL> set pagesize 0
    SQL> set long 1200
    SQL> select DBMS_METADATA.GET_DDL('SEQUENCE','JOBSEQ') from DUAL;
    
       CREATE SEQUENCE  "SYS"."JOBSEQ"  MINVALUE 1 MAXVALUE 999999999 INCREMENT BY 1
     START WITH 154 CACHE 20 NOORDER  CYCLE
  • Extrage o Definiția unei VIEW
  • SQL> select DBMS_METADATA.GET_DDL('VIEW','V_$PARAMETER') from DUAL;
    
      CREATE OR REPLACE FORCE VIEW "SYS"."V_$PARAMETER" ("NUM", "NAME", "TYPE", "VAL
    UE", "DISPLAY_VALUE", "ISDEFAULT", "ISSES_MODIFIABLE", "ISSYS_MODIFIABLE", "ISIN
    STANCE_MODIFIABLE", "ISMODIFIED", "ISADJUSTED", "ISDEPRECATED", "ISBASIC", "DESC
    RIPTION", "UPDATE_COMMENT", "HASH") AS
      select "NUM","NAME","TYPE","VALUE","DISPLAY_VALUE","ISDEFAULT","ISSES_MODIFIAB
    LE","ISSYS_MODIFIABLE","ISINSTANCE_MODIFIABLE","ISMODIFIED","ISADJUSTED","ISDEPR
    ECATED","ISBASIC","DESCRIPTION","UPDATE_COMMENT","HASH" from v$parameter