среда, 17 марта 2010 г.

Получение DDL скрипта объекта

Иногда для каких-то целей может потребоваться скрипт создания объекта (например, CONSTRAINT, TABLE, INDEX и т.д).
Вот один из вариантов как это сделать:
declare
   v_text varchar2(32767);
   procedure print(p_msg in varchar2) is
      v_msg varchar2(32767);
   begin
      v_msg := p_msg;
      if length(v_msg) <= 255 then
         dbms_output.put_line(v_msg);
      else
         while length(v_msg) > 0 loop
            dbms_output.put_line(substr(v_msg, 1, 255));
            v_msg := substr(v_msg, 256);
         end loop;
      end if;
   end print;
begin
   v_text := dbms_lob.substr(lob_loc => DBMS_METADATA.GET_DDL('TABLE',
                                                              'EMPLOYEE',
                                                              'SCOTT'),
                             amount  => 32767,
                             offset  => 1);
   print(v_text);
end;


Результат:
CREATE TABLE "SCOTT"."EMPLOYEE" 
   ( "EMPLOYEE_ID" NUMBER(4,0), 
 "LAST_NAME" VARCHAR2(15), 
 "FIRST_NAME" VARCHAR2(15), 
 "MIDDLE_INITIAL" VARCHAR2(1), 
 "JOB_ID" NUMBER(3,0), 
 "MANAGER_ID" NUMBER(4,0), 
 "HIRE_DATE" DATE, 
 "SALARY" NUMBER(7,2), 
 
"COMMISSION" NUMBER(7,2), 
 "DEPARTMENT_ID" NUMBER(2,0), 
  PRIMARY KEY ("EMPLOYEE_ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
 BUFFER_POOL DEFAULT)
  TABLESPACE "MAIN"  ENABLE, 
  CHECK (EMPLOYEE_ID IS NOT NULL) ENABLE, 
  CHECK (DEPARTMENT_ID IS NOT NULL) ENABLE, 
  FOREIGN KEY ("JOB_ID")
   REFERENCES "SCOTT"."JOB" ("JOB_ID") ENABLE, 
  FOREIGN KEY ("MANAGER_ID")
   REFERENCES
 "SCOTT"."EMPLOYEE" ("EMPLOYEE_ID") ENABLE, 
  FOREIGN KEY ("DEPARTMENT_ID")
   REFERENCES "SCOTT"."DEPARTMENT" ("DEPARTMENT_ID") ENABLE
   ) 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)
  TABLESPACE "MAIN" 

1 комментарий: