Wow - this is exactly what I need. Thanks a lot! On Thu, Mar 19, 2015 at 9:42 AM Andrew Kerber <andrew.kerber@xxxxxxxxx> wrote: > Well, here is where I am so far. I believe I will have to turn off the > pretty option to get the execute immediate to work. Sorry no comments, I > learned before those were a thing, and never could get used to them. Note > I haven't set up the logic to drop the interim table yet either. Regular > disclaimer, test before you use, misuse could cause issues. > > procedure gen_ddl(owner in varchar2, > > table_name in varchar2, > > int_table_name in varchar2 :=null, > > tablespace_name in varchar2 :=null, > > ind_tablespace_name in varchar2:=null, > > new_tablespace in varchar2 :=null, > > new_ind_tablespace in varchar2 :=null, > > runcrt boolean :=false, > > runredef boolean :=true, > > drop_interim_table boolean :=false) > > as > > h number; > > th number; > > cmd_string varchar2(2000); > > ddl_text varchar2(32000); > > orig_string varchar2(500); > > new_string varchar2(500); > > int_tabname varchar2(30); > > int_tabcounter number :=0; > > start_redef varchar2(500); > > copy_dependents varchar2(500); > > finish_redef varchar2(500); > > redef_errors number(5):=0; > > opts_flag varchar2(200); > > nopts_flag number; > > ind_defined number :=0; > > begin > > dbms_output.enable(1000000); > > dbms_output.put_line(rtrim(owner)||'.'||rtrim(table_name)); > > h := dbms_metadata.open('TABLE'); > > dbms_metadata.set_filter(h,'SCHEMA',owner); > > dbms_metadata.set_filter(h,'NAME',table_name); > > th := dbms_metadata.add_transform(h,'MODIFY'); > > if new_tablespace is not null > > then > > > dbms_metadata.set_remap_param(th,'REMAP_TABLESPACE',tablespace_name,new_tablespace); > > end if; > > if new_ind_tablespace is not null > > then > > > dbms_metadata.set_remap_param(th,'REMAP_TABLESPACE',ind_tablespace_name,new_ind_tablespace); > > end if; > > if int_table_name is null > > then > > int_tabname:=table_name||'_INT'; > > else > > int_tabname:=int_table_name; > > end if; > > th := dbms_metadata.add_transform(h,'DDL'); > > dbms_metadata.set_transform_param(th,'STORAGE',false); > > dbms_metadata.set_transform_param(th,'PRETTY',true); > > dbms_metadata.set_transform_param(th,'SQLTERMINATOR',false); > > dbms_metadata.set_transform_param(th,'CONSTRAINTS',false); > > dbms_metadata.set_transform_param(th,'REF_CONSTRAINTS',false); > > orig_string:='CREATE TABLE > "'||rtrim(owner)||'"'||'.'||'"'||rtrim(table_name)||'"'; > > new_string:='create table "'||owner||'"."'||int_tabname||'"'; > > select > replace(replace(dbms_metadata.fetch_clob(h),orig_string,new_string),'CHAR','VARCHAR2') > > into ddl_text from dual; > > dbms_output.put_line(ddl_text); > > if runcrt=true > > then > > execute immediate ddl_text; > > if runredef=true > > then > > > > start_redef:='dbms_redefinition.start_redef_table(uname=>'||owner||',orig_table=>'||table_name||',int_table=>'||int_tabname||',options_flag=>'||opts_flag||')'; > > > copy_dependents:='dbms_redefinition.copy_table_dependents(uname=>'||owner||',orig_table=>'||table_name||',int_table=>'||int_tabname||',num_errors=>redef_errors)'; > > > finish_redef:='dbms_redefinition.finish_redef_table(uname=>'||owner||',orig_table=>'||table_name||',int_table=>'||int_tabname||')'; > > begin > > dbms_output.put_line(start_redef); > > > > dbms_redefinition.start_redef_table(uname=>owner,orig_table=>table_name,int_table=>int_tabname,options_flag=>nopts_flag); > > dbms_output.put_line(copy_dependents); > > > dbms_redefinition.copy_table_dependents(uname=>owner,orig_table=>table_name,int_table=>int_tabname,num_errors=>redef_errors); > > dbms_output.put_line('Dependency Errors: '||to_char(redef_errors)); > > dbms_output.put_line(finish_redef); > > > dbms_redefinition.finish_redef_table(uname=>owner,orig_table=>table_name,int_table=>int_tabname); > > exception > > when others then > > > dbms_redefinition.abort_redef_table(uname=>owner,orig_table=>table_name,int_table=>int_tabname); > > raise; > > end; > > end if; > > end if; > > end; > > Sent from my iPad > > On Mar 18, 2015, at 3:30 PM, Chris Taylor < > christopherdtaylor1994@xxxxxxxxx> wrote: > > Here's the one I used: > > Step 1: Get a list of OBJECTs you want metadata for: > > select 'select > dbms_metadata.get_ddl('''||object_type||''','''||object_name||''','''||owner||''') > txt from dual;'--object_type, object_name, owner > from dba_objects > where object_name in > (select object_name from test1) > and object_type not in ('SYNONYM') > and owner not in ('SYS','SYSTEM') > and object_type not like '%PARTITION%' > and owner not like '%..%' -- replace owners with whatever owners you want > to exclude > and owner not like '% .. %' -- replace owners with whatever owners you > want to exclude > order by object_name; > > Step 2: Paste Output from above into the > set pagesize 0 > set long 90000 > set lines 130 > column txt format a130 word_wrapped > set feedback off > --set longchunksize to 250 > set echo off > > spool c:\tmp\extract_ddl.sql > > begin > > DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SEGMENT_ATTRIBUTES',true); > > DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false); > > DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'TABLESPACE',true); > > dbms_metadata.set_transform_param(dbms_metadata.session_transform,'PRETTY',true); > > dbms_metadata.set_transform_param(dbms_metadata.session_transform,'SQLTERMINATOR',TRUE); > > dbms_metadata.set_transform_param(dbms_metadata.session_transform,'CONSTRAINTS',FALSE); > > dbms_metadata.set_transform_param(dbms_metadata.session_transform,'REF_CONSTRAINTS',FALSE); > > dbms_metadata.set_transform_param(dbms_metadata.session_transform,'CONSTRAINTS_AS_ALTER',FALSE); > > dbms_metadata.set_transform_param(dbms_metadata.session_transform,'SPECIFICATION',TRUE); > > dbms_metadata.set_transform_param(dbms_metadata.session_transform,'BODY',TRUE); > end; > / > -- paste output from step 1 here and execute them > select dbms_metadata.get_ddl('TABLE','BS_APPLICATION','BS_ADMIN') txt from > dual; > > spool off > exit > > On Wed, Mar 18, 2015 at 1:56 PM, Deas, Scott <Scott.Deas@xxxxxxx> wrote: > >> Andrew, >> >> >> >> Below SQL will set some of the transform parameters to control your >> output, and then will replace double quotes with NULL, change CHAR to >> VARCHAR (protecting any existing VARCHAR), and will rename the table all at >> once (also pulls index ddl): >> >> >> >> BEGIN >> >> dbms_metadata.set_transform_param (dbms_metadata.session_transform, >> 'DEFAULT'); >> >> >> dbms_metadata.set_transform_param(dbms_metadata.session_transform,'PRETTY',TRUE); >> >> >> dbms_metadata.set_transform_param(dbms_metadata.session_transform,'CONSTRAINTS',FALSE); >> >> >> dbms_metadata.set_transform_param(dbms_metadata.session_transform,'CONSTRAINTS_AS_ALTER',TRUE); >> >> >> dbms_metadata.set_transform_param(dbms_metadata.session_transform,'SQLTERMINATOR',TRUE); >> >> >> dbms_metadata.set_transform_param(dbms_metadata.session_transform,'STORAGE',FALSE); >> >> END; >> >> / >> >> >> >> SELECT REPLACE(REPLACE(REPLACE(REPLACE(dbms_metadata.get_ddl('TABLE', >> table_name,owner),'VARCHAR','CHAR'),'CHAR','VARCHAR'),chr(34),NULL),table_name,table_name >> >> ||'_CPY') AS ddl_create >> >> FROM dba_tables >> >> WHERE TABLE_NAME = 'x' >> >> AND OWNER = 'y' >> >> UNION ALL >> >> SELECT REPLACE(REPLACE(REPLACE(dbms_metadata.get_ddl('INDEX', >> INDEX_NAME,OWNER),chr(34),NULL),index_name,index_name||'_CPY'),table_name,table_name||'_CPY') >> AS ddl_indexes >> >> FROM dba_INDEXES >> >> WHERE TABLE_NAME = 'x' and TABLE_OWNER = 'y' >> >> >> >> I’m sure there’s a better way to write this than having table_name and >> table_owner hard-coded twice. >> >> >> >> Thanks, >> >> Scott >> >> >> >> >> >> *From:* oracle-l-bounce@xxxxxxxxxxxxx [mailto: >> oracle-l-bounce@xxxxxxxxxxxxx] *On Behalf Of *Andrew Kerber >> *Sent:* Wednesday, March 18, 2015 2:38 PM >> *To:* Steve Harville >> *Cc:* Stefan Knecht; <oracle-l@xxxxxxxxxxxxx> >> *Subject:* Re: Dbms_metadata experts? >> >> >> >> Below is what I have so far. I would like to have a neater way of >> changing char to varchar2, and I would like to change the table names to >> tablename_int. >> >> >> >> select 'select >> replace(dbms_metadata.get_ddl(object_type=>'||''''||'TABLE'||''''||',name=>'||''''||table_name||''''||',schema=>'|| >> >> ''''||owner||''''||')'||'||'||''''||';'||''''|| >> >> ','||''''||'CHAR('||''''||','||''''||'varchar2('||''''||') from dual;' >> >> from dba_tables where owner='SCOTT'; >> >> >> Sent from my iPad >> >> >> >> Notice of Confidentiality: **This E-mail and any of its attachments >> may contain >> Lincoln National Corporation proprietary information, which is >> privileged, confidential, >> or subject to copyright belonging to the Lincoln National Corporation >> family of >> companies. This E-mail is intended solely for the use of the individual >> or entity to >> which it is addressed. If you are not the intended recipient of this >> E-mail, you are >> hereby notified that any dissemination, distribution, copying, or action >> taken in >> relation to the contents of and attachments to this E-mail is strictly >> prohibited >> and may be unlawful. If you have received this E-mail in error, please >> notify the >> sender immediately and permanently delete the original and any copy of >> this E-mail >> and any printout. Thank You.** >> > >