19. 11. 2014

Oracle - vygenerovanie DDL príkazu

Občas je potrebné vygenerovať príkaz pre založenie už existujúceho objektu v databáze (alebo ho upraviť pre výrobu iného), napríklad prázdnej tabuľky, view, či triggra.
V softvéroch pre správu sa zvyčajne označuje termínom "generate DDL".




DDL - data definition language - prevažne definície databázových štruktúr (create, alter, drop, truncate)
DML - data manipulation language - práca s dátami v štruktúrach (select, insert, update, delete)
DCL - data control language - práca s právami (grant, revoke)
TCL - práca s transakciami (commit)

Pre vygenerovanie príkazu z existujúceho objektu možno v oracle použiť funkciu dbms_metadata.

select dbms_metadata.get_ddl('TABLESPACE', 'TOOLS') FROM dual;
select dbms_metadata.get_ddl('TABLE','ZARIADENIE','USER1') from dual; 
select dbms_metadata.get_ddl('INDEX','ZARIADENIE_IDX','USER1') from dual;
select dbms_metadata.get_ddl('FUNCTION', 'WHOAMI') FROM dual;
select dbms_metadata.get_ddl('PROCEDURE', 'WHOAMI') FROM dual;
select dbms_metadata.get_ddl('TABLESPACE', 'NORM_IND') FROM dual;

Príklad použitia:
SQL> set heading off;
SQL> set echo off;
SQL> Set pages 999;
SQL> set long 90000;
SQL> SELECT dbms_metadata.get_ddl('TABLESPACE', 'TOOLS') FROM dual;

CREATE TABLESPACE "TOOLS" DATAFILE
'/u2/oracle/DBA1/data/tools_001.odf' SIZE 10485760
AUTOEXTEND ON NEXT 209715200 MAXSIZE 10001M,
'/u2/oracle/DBA1/data/tools_002.odf' SIZE 210763776
AUTOEXTEND ON NEXT 209715200 MAXSIZE 10001M
LOGGING ONLINE PERMANENT BLOCKSIZE 8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT
NOCOMPRESS SEGMENT SPACE MANAGEMENT AUTO
ALTER DATABASE DATAFILE
'/u2/oracle/DBA1/data/tools_001.odf' RESIZE 210763776


Príkaz vygeneruje tablespace TOOLS, ten je súčasťou základnej inštalácie prázdnej DB, preto má zmysel upraviť príkaz napríklad pre nový tablespace s rovnakými parametrami.
Pri hromadnom generovaní je potrebné za každý príkaz vygenerovať buď bodkočiarku na konci riadku, alebo lomítko.

Žiadne komentáre:

Zverejnenie komentára