| 
		
			| NEED HELP regarding DBMS_METADATA.GET_DDL [message #394249] | Thu, 26 March 2009 05:25  |  
			| 
				
				
					| aditya.garg@accenture.com Messages: 8
 Registered: March 2009
 | Junior Member |  |  |  
	| In my project i need to extract around 1000's of packages from dev environment & put in production environment. I tried doing this way using DBMS_METADATA.GET_DDL command, but i am facing a small error which is that i am able to copy all the packages but while compiling there is an error occuring. after testing came to know that there is no "/" backslash between package body & spec.
 
 So can you please guide me if there is any alternative way or we can do something with this query itself. where we can differentiate between spec & body part
 
 set long 500000
 set linesize 1000
 SET HEAD off
 set trimspool on
 set verify off
 set feed off;
 define name='&1'
 spool '&&name'
 column XXXX format a300
 SELECT DBMS_METADATA.GET_DDL('PACKAGE','&&name','APPS')||'/' as xxxx from dual;
 spool off
 set head on
 
 
 Thanks
 AADI
 |  
	|  |  | 
	|  | 
	|  | 
	| 
		
			| Re: NEED HELP regarding DBMS_METADATA.GET_DDL [message #394337 is a reply to message #394259] | Thu, 26 March 2009 08:45   |  
			| 
				
				
					| aditya.garg@accenture.com Messages: 8
 Registered: March 2009
 | Junior Member |  |  |  
	| Hi babu, 
 Actually we are migrating from 11.5.8 to 11.5.10 version of database & while testing we were not able to copy around 4000 standard packages from dev env to prod env.
 If we start doing it manually it will take around 100's of man hours so meanwhile we are trying to locate some generic idea or code which can be used to take all the packages from dev to prod.
 That's why we tried writing the code for DBMS_METADATA utility.
 
 
 And the error which we are getting is after running code. i.e. once the package's are extracted and we try to validate & compile it we get a compilation error. Which is due to missing of back slash "/" between package body & package Spec.
 
 Hope i have communicated the issue well if you still require any further info please let me know.
 
 Thanks in Advance.
 
 Please let me know if there is some tool which can do such kind off job.
 |  
	|  |  | 
	| 
		
			| Re: NEED HELP regarding DBMS_METADATA.GET_DDL [message #394345 is a reply to message #394337] | Thu, 26 March 2009 09:12   |  
			| 
				
				|  | Mahesh Rajendran Messages: 10708
 Registered: March 2002
 Location: oracleDocoVille
 | Senior MemberAccount Moderator
 |  |  |  
	| Actually, the process you are trying to do is what we call 'manual'. It is very time consuming, requires a lot of intervention and understanding. 
 What happens to other 'objects', its dependents, tables and data?
 Easiest way to duplicate to test environment, upgrade there.
 You can use RMAN duplication, RMAN cold restore, exp/imp or
 better expdp/impdp.
 If you duplicate, it is the whole database that is been duplicated.
 You can also selectively export/import a particular schema, so that all objects are exported and imported.
 
 |  
	|  |  | 
	|  | 
	| 
		
			| Re: NEED HELP regarding DBMS_METADATA.GET_DDL [message #394436 is a reply to message #394347] | Fri, 27 March 2009 01:51   |  
			| 
				
				
					| aditya.garg@accenture.com Messages: 8
 Registered: March 2009
 | Junior Member |  |  |  
	| Due to constraints we can't use RMAN commands... 
 This is the error i am encountering while compiling the package in the putty...
 SQL> @ECO_ERROR_HANDLER.lst
 
 Warning: Package created with compilation errors.
 
 SQL> show err
 No errors.
 
 the process is i willcall the dbms.metadata utility from unix sqlpls prompt and in return it will save a file in the backend of the following package in this case ECO_ERROR_HANDLER.lst.And when i will call the package for compilation i will be able to run it without error. but in this case it is ending up with errors. and the error is missing of breakpoint or backslash b/w package Spec & package body
 |  
	|  |  | 
	|  | 
	|  | 
	| 
		
			| Re: NEED HELP regarding DBMS_METADATA.GET_DDL [message #394750 is a reply to message #394457] | Mon, 30 March 2009 02:27   |  
			| 
				
				
					| aditya.garg@accenture.com Messages: 8
 Registered: March 2009
 | Junior Member |  |  |  
	| Hi After the sucessfull implimnetation of the process the next thing i want to do is the automate the process of extracting definations of DB objects as the above discussed process is time consuming. So in this context i started working on combining UTL_FILE utility & the DBMS_METADATA.get_ddl query and i am stuck at one point.
 --The Below UTL_FILE procedure will be having a file name object.csv which will be having NAMES & TYPES of the DB objects. ex.
 XXPPP_REF_CODES,TABLE
 XX_SWITCH_LOGON_TRG,TRIGGER
 XXPO_TEST_WMS_22_V,VIEW
 ----------------------------------------------------------------
 SET SERVEROUTPUT ON SIZE 1000000
 DECLARE
 l_file         UTL_FILE.file_type;
 l_location     VARCHAR2(100) := '/sptec51/app/SPDEV1/product/10.2.0//appsutil/outbound/SPDEV1_gbhpdr02';
 l_filename     VARCHAR2(100) := 'object.csv';
 l_text         VARCHAR2(32767);
 BEGIN
 -- Open file.
 l_file := UTL_FILE.fopen(l_location, l_filename, 'r', 32767);
 
 BEGIN
 LOOP
 UTL_FILE.get_line(l_file, l_text, 32767);
 DBMS_OUTPUT.put_line(l_text);
 END LOOP;
 EXCEPTION
 WHEN NO_DATA_FOUND THEN
 NULL;
 END;
 UTL_FILE.fclose(l_file);
 END;
 /
 ----------------------------------------------------------------
 Now i was thinking of providing the NAME & TYPE of objects to the DBMS_METADATA query automatically. I am stuck at this point how to pass the values of object.csv to &&name, &&type in DBMS_METADATA query.
 It will of great help if you can provide your inputs.
 ----------------------------------------------------------------
 set long 5000000
 set linesize 30000
 SET HEAD off
 set trimspool on
 set verify off
 set feed off
 define name='&1'
 define type='&2'
 spool '&&name'
 column XXXX format a5000
 SELECT replace(DBMS_METADATA.GET_DDL('&&type','&&name','APPS'),'CREATE OR REPLACE PACKAGE BODY','/'||chr(10)||'CREATE OR REPLACE PACKAGE BODY') ||chr(10)||'/' as xxxx from dual;
 spool off
 SET HEAD on
 -----------------------------------------------------------------
 |  
	|  |  | 
	| 
		
			| Re: NEED HELP regarding DBMS_METADATA.GET_DDL [message #394841 is a reply to message #394750] | Mon, 30 March 2009 09:00  |  
			| 
				
				|  | Mahesh Rajendran Messages: 10708
 Registered: March 2002
 Location: oracleDocoVille
 | Senior MemberAccount Moderator
 |  |  |  
	| query the user_objects. for object_type use an IN filter.
 
 object_type in ('PACKAGE','PROCEDURE')You do not want to give PACKAGE_BODY as we already deal with that within PACKAGE.
 
 dbadmin@chum > @t1
  CREATE OR REPLACE PACKAGE "DBADMIN"."PKG1"
as
procedure p1;
procedure p2;
end;
/
CREATE OR REPLACE PACKAGE BODY "DBADMIN"."PKG1"
as
procedure p1 is
begin
DBMS_OUTPUT.PUT_LINE ('from p1');
end;
procedure p2 is
begin
DBMS_OUTPUT.PUT_LINE ('from p2');
end;
procedure p3 is
begin
DBMS_OUTPUT.PUT_LINE ('from p3');
end;
end;
/
  CREATE OR REPLACE FUNCTION "DBADMIN"."FOO"
return boolean
as
begin
null;
end;
/
dbadmin@chum > get t1
  1  set long 500000
  2  set linesize 1000
  3  SET HEAD off
  4  set trimspool on
  5  set verify off
  6  set feed off;
  7  spool dummy.lst
  8  column XXXX format a300
  9  sELECT 	replace(DBMS_METADATA.GET_DDL(u.object_type,u.object_name),'CREATE OR REPLACE PACKAGE BODY','/'||
 10		chr(10)||'CREATE OR REPLACE PACKAGE BODY') ||chr(10)||'/' as xxxx from user_objects u where object_type in ('PACKAGE','FUNCTION');
 11  spool off
 12* set feed on
dbadmin@chum > 
 |  
	|  |  |