Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Mailing Lists -> Oracle-L -> Re: export user definitions

Re: export user definitions

From: Jared Still <jkstill_at_cybcon.com>
Date: Wed, 12 Sep 2001 23:15:35 -0700
Message-ID: <F001.0038CAE4.20010912231517@fatcity.com>

On Wednesday 12 September 2001 21:05, Deshpande, Kirti wrote:
> I thought Joe was working on some kewl tool to address processing of
> exported dump file to get some meaningful SQL out ....

Maybe this would work?

Far from perfect, it mostly massages the table definitions into something manageable.

use it like:

imp userid=scott/tiger indexfile=ddl.txt file=expdat.dmp indexfile_filter < ddl.txt > ddl.sql

Jared

--

#!/usr/bin/perl


=pod

        indexfile_filter

        create usable SQL from 'imp indexfile=myfile.sql'

        e.g. indexfile_filter < myfile.sql > newfile.sql

=cut

my $ddl = undef;

while(<>) {

        chomp;
        # don't remove quotes!
        # they are your friend for odd object names
        #s/\"//g;                       # remove quotes
        s/^REM\s+//;    # uncomment

        next if /^\s*$/; # blank line
        next if /^CONNECT/;

        # process current sql if defined and new command starting

        if ( /^CREATE|ALTER/ ) {
                if ( $ddl ) {
                        sqlFormat(\$ddl);
                        print "$ddl\n\n";
                        $ddl = '';
                }
        }

        $ddl .= $_;
}

sqlFormat(\$ddl);
print "$ddl\n";

sub sqlFormat {

        my ($sqlRef) = @_;

        # 
        
        my $parsed = ${$sqlRef};

        if ( ${$sqlRef} =~ /^CREATE\sTABLE/ ) {
                $parsed =~ s/
                        ^([\w\s\d\"\.\$]+)      # match to first paren
                        (\(.+\){1}?)                    # get column definitions
                        (.+)                                            # the junk in 
the middle
                        (\([\w\s\d\$\"]+\))     # last set of parens
                        (.*)$                                           # to the end 
of the line
                        /undef/x;                               # can replace with junk
                                                                                # as 
we have parsed text

                my @sqlParts = ( $1, $2, $3, $4, $5 );

                #$sqlParts[0] = ${$sqlRef};
                for $i ( 0 .. $#sqlParts ) {
                        if ( $sqlParts[$i] =~ /,/ ) {
                                # newline after opening paren
                                $sqlParts[$i] =~ s/^(.*)(\()(\")(.+)$/$1$2\n   $3$4/;
                                # newline before comma following closing paren
                                $sqlParts[$i] =~ s/\),/\)\n   ,/g;
                                # newline before comma following data type e.g. DATE
                                $sqlParts[$i] =~ s/(\w),/$1\n   ,/g;
                                # newline after closing paren
                                $sqlParts[$i] =~ s/\)$/\n\)/;
                        }
                }

                ${$sqlRef} = join("\n",@sqlParts);
                        
        }

}


-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: Jared Still
  INET: jkstill_at_cybcon.com

Fat City Network Services    -- (858) 538-5051  FAX: (858) 538-5051
San Diego, California        -- Public Internet access / Mailing Lists
--------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: ListGuru_at_fatcity.com (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).
Received on Thu Sep 13 2001 - 01:15:35 CDT

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US