Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

generating INSERT statements

668822Aug 1 2009 — edited Aug 18 2009
hello all,

i am not very efficient in development activities, and i am asked to create a procedure to generating insert statement for each record, in each table for each column for migration purpose...

i know it is very difficult task, and i need to make a seperate .txt or .sql file for those insert statements,

how can i achieve this???? i have set UTL_FILE_DIR to guest_dir and grant permissions to specific user, now there are 415 tables in schema..

what i have done so far is.........
create or replace procedure insert_data is
l_srno          NUMBER:=0;
    l_chardate      VARCHAR2(1000);
    l_filename      VARCHAR2(1000);
    l_filehandle utl_file.file_type;
    b_file utl_file.file_type;
    l_ip            VARCHAR2(100); 
    l_flag          CHAR(1):='N';
    RecordGroup varchar2(5000);
    l_Str          VARCHAR2(32767):= NULL;
    l_Str1          VARCHAR2(32767):= 'SELECT ' ;
    l_Cm_Tbl_Name  VARCHAR2(32767):= NULL;    
    l_Rg_id        RecordGroup%TYPE; 
     l_Rg_name      VARCHAR2(40) := 'schema_name';
    l_Rec_Cursor   NUMBER;  
    l_Cur_Rec      NUMBER := 0;
    GroupColumn varchar2(5000);
    l_Gc_Id        GroupColumn%TYPE; 
    l_Data_Type    VARCHAR2(50);
    l_Length       NUMBER(10);
     l_Number_Type  NUMBER;
     l_Varchar_Type VARCHAR2(2000);
    l_Date_Type    DATE;    
    l_Rec_Status  NUMBER; 
		L_COUNT				NUMBER :=0;
CURSOR tablename IS
			SELECT	table_name 
			FROM		user_tables;
      
CURSOR TableCol (a_tablename user_tables.table_name%TYPE) IS
SELECT	column_name,
							data_type  
			FROM		user_tab_columns w 
			WHERE		w.table_name=a_tablename
      and column_name='CREATEDON';
      
begin

l_filehandle :=utl_file.fopen('guest_dir','insert.sql','W');
      
      FOR k IN tablename 
      LOOP
    
        FOR t IN TableCol(k.table_name) 
        LOOP
                 
          IF TableCol%ROWCOUNT=1 THEN
            l_Str  := t.column_name ;
            l_Str1  := l_Str1||t.column_name ;
          ELSE
            l_Str  := l_Str ||','||t.column_name ;
            l_Str1  := l_Str1 ||','||t.column_name ;
          END IF;
        END LOOP;

        l_Str1 := l_Str1||' '||' FROM '||k.table_name;
        

         
         *IF Not Id_Null(l_Rg_id) THEN* 

             Delete_Group(l_Rg_id);    
         END IF; 
         
        MESSAGE(l_Str1);
        MESSAGE(l_Str1);
        l_Rg_id := Create_Group_From_Query(l_Rg_name,l_Str1);
        l_Rec_Cursor := Populate_Group(l_Rg_id); 

         IF l_Rec_Cursor = 0 THEN  
          l_Cur_Rec := Get_Group_Row_Count( l_Rg_id ); 
          SYNCHRONIZE;        
           FOR J IN 1..L_CUR_REC
           LOOP
						utl_file.new_line(l_filehandle);
						utl_file.put(l_filehandle,'INSERT INTO '||K.table_name||' ('||l_Str ||' ) values '); 	
						utl_file.new_line(l_filehandle);
						utl_file.put(l_filehandle,'(');
						 FOR i IN TableCol(k.table_name)
			 				LOOP
		  				l_Gc_Id := FIND_COLUMN( l_Rg_Name||'.'||I.COLUMN_NAME); 
              
              IF NOT Id_Null(l_Gc_Id) THEN 
 								SELECT  DATA_TYPE,
 												DATA_LENGTH 
    				      INTO  L_DATA_TYPE,
    				      			L_LENGTH 
						   		FROM  USER_TAB_COLUMNS 
						  	 WHERE  TABLE_NAME  = k.table_name
						    	 AND  COLUMN_NAME = i.column_name  ;			 					

									IF L_DATA_TYPE = 'VARCHAR2' OR L_DATA_TYPE = 'CHAR' THEN
										L_VARCHAR_TYPE := GET_GROUP_CHAR_CELL( l_Gc_Id, j ); 
											utl_file.PUT(l_filehandle,''''||(NVL(L_VARCHAR_TYPE,' '))||''''||',');
									ELSIF L_DATA_TYPE = 'NUMBER' THEN
										L_NUMBER_TYPE := GET_GROUP_NUMBER_CELL( l_Gc_Id, j ); 
											utl_file.PUT(l_filehandle,(NVL(L_NUMBER_TYPE,' '))||',');
									ELSIF L_DATA_TYPE = 'DATE' THEN
										L_DATE_TYPE := GET_GROUP_DATE_CELL( l_Gc_Id, j ); 
												utl_file.PUT(l_filehandle,'TO_DATE('''||NVL(To_Char(L_DATE_TYPE,'dd/mm/yyyy hh24:mi:ss'),' ')||','''||'dd-mon-rrrr hh24:mi'''||')'||',' );												
									END IF;
							 END IF;
							l_Str1:='SELECT ';
							 			 			
			 				END LOOP;	
			 				utl_file.put(l_filehandle,')');
							utl_file.new_line(l_filehandle);			 				
							utl_file.put(l_filehandle,'COMMIT;');			 				
	    		    utl_file.new_line(l_filehandle,1);
	  
			  	 END LOOP;		
			   END IF;
  		 END LOOP; 		
		 	utl_file.new_line(l_filehandle);
	  	utl_file.put(l_filehandle,('EXIT'));
	  	utl_file.fclose(l_filehandle);
    	Delete_Group(l_Rg_id);		
EXCEPTION
	 WHEN FORM_TRIGGER_FAILURE THEN
	 utl_file.FCLOSE(l_filehandle);
		RAISE;

 	WHEN OTHERS THEN
		 utl_file.FCLOSE(l_filehandle);
		RAISE FORM_TRIGGER_FAILURE;
end insert_data;
and i am getting error "Error: PLS-00201: identifier 'ID_NULL' must be declared"


any suggestion will be valuable..

thanks and regards
VD
This post has been answered by MichaelS on Aug 3 2009
Jump to Answer
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Sep 15 2009
Added on Aug 1 2009
33 comments
10,578 views