Go Back   The UNIX and Linux Forums > Top Forums > Shell Programming and Scripting
Search Forums:



Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here.

Closed Thread    
 
Thread Tools Search this Thread Display Modes
    #1  
Old 08-26-2008
Registered User
 

Join Date: Aug 2008
Posts: 39
Thanks: 0
Thanked 0 Times in 0 Posts
Help required to parse Oracle imp show=y output to DDL Commands

Hi,

I generated an Oracle schema DDL script file using the show=y option of the Oracle import utility but the file that it generates needs a little more formating before we can run this as simple DDL comands to generate the schema at Target using the script file.Here is the simplified output of the file generated for one of the tables which i am trying to parse to a set of CREATE TABLE and ALTER TABLE commands

Output Generated
------------------

"CREATE TABLE "ACCOUNT" ("ACCT_ID" CHAR(4) NOT NULL DISABLE, "ACCT_NM" VARCH"
"AR2(30) NOT NULL DISABLE, "ACCT_LONG_NM" VARCHAR2(50), "PROD_CD" VARCHAR2(8"
"), "MARKET_CD" VARCHAR2(6), "VEHICLE_CD" VARCHAR2(6), "PRIM_BMARK_ID" VARCH"
"AR2(12), "WMC_COMPANY_CD" VARCHAR2(4), "FAM_ID" CHAR(5) NOT NULL DISABLE, ""
"PERF_INCEP_DT" DATE, "OPEN_DT" DATE, "CLOSE_DT" DATE, "MODEL_FLG" CHAR(1) N"
"OT NULL DISABLE, "INDEX_ID" VARCHAR2(12), "ACCT_TYP" VARCHAR2(9), "ACCT_SER"
"VICER_CD" CHAR(1), "CNTRY_CD" CHAR(2), "AMORT_TYP" VARCHAR2(12), "TAX_ID" V"
"ARCHAR2(12), "CONTRACT_DT" DATE, "FUND_TYPE" VARCHAR2(6), "ACCT_SYSTEM" CHA"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
"T" DATE, "CASH_EQVLNT_DEFN" VARCHAR2(30), "EXEMPT_FROM_SEC_RULE" VARCHAR2(8"
"), "QUALIFIED_PURCHASER_CD" CHAR(1), "LAST_BILL_DT" DATE, "ANTICIP_LAST_TRA"
"DE_TS" DATE, "RETAIN_ASSETS_FLG" CHAR(1), "TERM_NOTIFY_DT" DATE, "CARE_MAIN"
"T_FLG" CHAR(1), "EST_CLOSE_DT" DATE, "COMPLIANCE_INSTANCE_CD" VARCHAR2(12),"
" "INVESTMENT_MGMT_FEE_CD" VARCHAR2(8)) PCTFREE 10 PCTUSED 40 INITRANS 1 MA"
"XTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1) TABLESPACE "
""WMC_DATA" LOGGING NOCOMPRESS"
" ALTER TABLE "ACCOUNT" MODIFY ("MODEL_FLG" DEFAULT 'N' )"
" ALTER TABLE "ACCOUNT" MODIFY ("INS_TS" DEFAULT SYSDATE)"
" ALTER TABLE "ACCOUNT" MODIFY ("UPD_TS" DEFAULT SYSDATE)"
" ALTER TABLE "ACCOUNT" MODIFY ("BOOK_CLOSE_DAY" DEFAULT 3)"
" ALTER TABLE "ACCOUNT" MODIFY ("UPD_LOGIN" DEFAULT USER)"
" ALTER TABLE "ACCOUNT" MODIFY ("ASSET_ALLOC_DISCR_FLG" DEFAULT 'N' "
.
.
.
.
.
.
.
.
.
.
.
.
.
" ALTER TABLE "ACCOUNT" MODIFY ("AUTO_CASH_RECON_FLG" DEFAULT 'N' "
" )"
" ALTER TABLE "ACCOUNT" MODIFY ("NASD_2790_RULE" DEFAULT 'NR')"
. . skipping table "ACCOUNT"

Desired Output
--------------

CREATE TABLE ACCOUNT (ACCT_ID CHAR(4) NOT NULL DISABLE, ACCT_NM VARCH
AR2(30) NOT NULL DISABLE, ACCT_LONG_NM VARCHAR2(50), PROD_CD VARCHAR2(8
), MARKET_CD VARCHAR2(6), VEHICLE_CD VARCHAR2(6), PRIM_BMARK_ID VARCH
AR2(12), WMC_COMPANY_CD VARCHAR2(4), FAM_ID CHAR(5) NOT NULL DISABLE,
PERF_INCEP_DT DATE, OPEN_DT DATE, CLOSE_DT DATE, MODEL_FLG CHAR(1) N
OT NULL DISABLE, INDEX_ID VARCHAR2(12), ACCT_TYP VARCHAR2(9), ACCT_SER
VICER_CD CHAR(1), CNTRY_CD CHAR(2), AMORT_TYP VARCHAR2(12), TAX_ID V
ARCHAR2(12), CONTRACT_DT DATE, FUND_TYPE VARCHAR2(6), ACCT_SYSTEM CHA
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
T DATE, CASH_EQVLNT_DEFN VARCHAR2(30), EXEMPT_FROM_SEC_RULE VARCHAR2(8
), QUALIFIED_PURCHASER_CD CHAR(1), LAST_BILL_DT DATE, ANTICIP_LAST_TRA
DE_TS DATE, RETAIN_ASSETS_FLG CHAR(1), TERM_NOTIFY_DT DATE, CARE_MAIN
T_FLG CHAR(1), EST_CLOSE_DT DATE, COMPLIANCE_INSTANCE_CD VARCHAR2(12),
INVESTMENT_MGMT_FEE_CD VARCHAR2(8)) PCTFREE 10 PCTUSED 40 INITRANS 1 MA
XTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1) TABLESPACE
WMC_DATA LOGGING NOCOMPRESS
/
ALTER TABLE ACCOUNT MODIFY (MODEL_FLG DEFAULT 'N' )
/
ALTER TABLE ACCOUNT MODIFY (INS_TS DEFAULT SYSDATE)
/
ALTER TABLE ACCOUNT MODIFY (UPD_TS DEFAULT SYSDATE)
/
ALTER TABLE ACCOUNT MODIFY (BOOK_CLOSE_DAY DEFAULT 3)
/
ALTER TABLE ACCOUNT MODIFY (UPD_LOGIN DEFAULT USER)
/
ALTER TABLE ACCOUNT MODIFY (ASSET_ALLOC_DISCR_FLG DEFAULT 'N'
.
.
.
.
.
.
.
.
.
.
.
.
.
ALTER TABLE ACCOUNT MODIFY (AUTO_CASH_RECON_FLG DEFAULT 'N'
)
/
ALTER TABLE ACCOUNT MODIFY (NASD_2790_RULE DEFAULT 'NR')
/

Requirements
------------

We need to remove the " from each line enclosing the line as in the output file
Introduce 2 new lines between start and end of each command and provide a / to be able to run as a command in sql

Every Create Table command start with "CREATE TABLE.. and ends with LOGGING NOCOMPRESS"

Every ALTER TABLE Command starts with " ALTER TABLE... and ends with )"

Every New Create Table starts After . . skipping table line

Basically my outfile has a collection of these commands so i need a script that can run in a loop and parse all these statements and put in an outfile

Quick response is appreciated...

Thanks and Kind Regards,
Rajan.S

Last edited by rajan_san; 08-26-2008 at 08:46 AM.. Reason: Missed one requirement
Sponsored Links
    #2  
Old 08-26-2008
aigles's Avatar
aigles aigles is offline Forum Advisor  
Registered User
 

Join Date: Apr 2004
Location: Bordeaux, France
Posts: 1,711
Thanks: 2
Thanked 60 Times in 56 Posts
As a starting point :
Code:
awk '
/^".*"$/ {
   $0 = substr($0, 2, length-2);
}

/^ *CREATE TABLE/ {
   sql = $0;
   while ($0 !~ /LOGGING NOCOMPRESS$/) {
      if (! getline) break;
      $0 = substr($0, 2, length-2);
      sql = sql "\n" $0;
   }
   print sql "\n/";
   next;
}

/^ *ALTER TABLE/ {
   sql = $0;
   while (substr($0,length,1) != ")") {
      if (! getline) break;
      $0 = substr($0, 2, length-2);
      sql = sql "\n" $0;
   }
   print sql "\n/";
   next;
}

' inputfile

Inputfile:
Code:
"CREATE TABLE "ACCOUNT" ("ACCT_ID" CHAR(4) NOT NULL DISABLE, "ACCT_NM" VARCH"
"AR2(30) NOT NULL DISABLE, "ACCT_LONG_NM" VARCHAR2(50), "PROD_CD" VARCHAR2(8"
"), "MARKET_CD" VARCHAR2(6), "VEHICLE_CD" VARCHAR2(6), "PRIM_BMARK_ID" VARCH"
"AR2(12), "WMC_COMPANY_CD" VARCHAR2(4), "FAM_ID" CHAR(5) NOT NULL DISABLE, ""
"PERF_INCEP_DT" DATE, "OPEN_DT" DATE, "CLOSE_DT" DATE, "MODEL_FLG" CHAR(1) N"
"OT NULL DISABLE, "INDEX_ID" VARCHAR2(12), "ACCT_TYP" VARCHAR2(9), "ACCT_SER"
"VICER_CD" CHAR(1), "CNTRY_CD" CHAR(2), "AMORT_TYP" VARCHAR2(12), "TAX_ID" V"
"ARCHAR2(12), "CONTRACT_DT" DATE, "FUND_TYPE" VARCHAR2(6), "ACCT_SYSTEM" CHA"
"R(5)) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 F"
"REELISTS 1 FREELIST GROUPS 1) TABLESPACE "WMC_DATA" LOGGING NOCOMPRESS"
" ALTER TABLE "ACCOUNT" MODIFY ("MODEL_FLG" DEFAULT 'N' )"
" ALTER TABLE "ACCOUNT" MODIFY ("INS_TS" DEFAULT SYSDATE)"
" ALTER TABLE "ACCOUNT" MODIFY ("UPD_TS" DEFAULT SYSDATE)"
" ALTER TABLE "ACCOUNT" MODIFY ("BOOK_CLOSE_DAY" DEFAULT 3)"
" ALTER TABLE "ACCOUNT" MODIFY ("UPD_LOGIN" DEFAULT USER)"
" ALTER TABLE "ACCOUNT" MODIFY ("ASSET_ALLOC_DISCR_FLG" DEFAULT 'N')"
" ALTER TABLE "ACCOUNT" MODIFY ("NASD_2790_RULE" DEFAULT 'NR' "
")"
. . skipping table "ACCOUNT"

Output:
Code:
CREATE TABLE "ACCOUNT" ("ACCT_ID" CHAR(4) NOT NULL DISABLE, "ACCT_NM" VARCH
AR2(30) NOT NULL DISABLE, "ACCT_LONG_NM" VARCHAR2(50), "PROD_CD" VARCHAR2(8
), "MARKET_CD" VARCHAR2(6), "VEHICLE_CD" VARCHAR2(6), "PRIM_BMARK_ID" VARCH
AR2(12), "WMC_COMPANY_CD" VARCHAR2(4), "FAM_ID" CHAR(5) NOT NULL DISABLE, "
PERF_INCEP_DT" DATE, "OPEN_DT" DATE, "CLOSE_DT" DATE, "MODEL_FLG" CHAR(1) N
OT NULL DISABLE, "INDEX_ID" VARCHAR2(12), "ACCT_TYP" VARCHAR2(9), "ACCT_SER
VICER_CD" CHAR(1), "CNTRY_CD" CHAR(2), "AMORT_TYP" VARCHAR2(12), "TAX_ID" V
ARCHAR2(12), "CONTRACT_DT" DATE, "FUND_TYPE" VARCHAR2(6), "ACCT_SYSTEM" CHA
R(5)) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 F
REELISTS 1 FREELIST GROUPS 1) TABLESPACE "WMC_DATA" LOGGING NOCOMPRESS
/
 ALTER TABLE "ACCOUNT" MODIFY ("MODEL_FLG" DEFAULT 'N' )
/
 ALTER TABLE "ACCOUNT" MODIFY ("INS_TS" DEFAULT SYSDATE)
/
 ALTER TABLE "ACCOUNT" MODIFY ("UPD_TS" DEFAULT SYSDATE)
/
 ALTER TABLE "ACCOUNT" MODIFY ("BOOK_CLOSE_DAY" DEFAULT 3)
/
 ALTER TABLE "ACCOUNT" MODIFY ("UPD_LOGIN" DEFAULT USER)
/
 ALTER TABLE "ACCOUNT" MODIFY ("ASSET_ALLOC_DISCR_FLG" DEFAULT 'N')
/
 ALTER TABLE "ACCOUNT" MODIFY ("NASD_2790_RULE" DEFAULT 'NR'
)
/

Are you sure that you can split sql commands anywhere ?

Jean-Pierre.
Sponsored Links
Closed Thread

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Help required for these commands ayanbiswas UNIX for Dummies Questions & Answers 1 07-23-2008 06:26 AM
parse through one text file and output many sophiadun UNIX for Dummies Questions & Answers 14 02-20-2008 05:08 AM
echo doesnot show output samy123 Shell Programming and Scripting 4 01-21-2008 09:15 AM
Parse ping output palm101 Shell Programming and Scripting 3 11-10-2007 11:16 PM
Oracle like syntax required ShellBoy UNIX for Dummies Questions & Answers 0 07-17-2007 02:07 AM



All times are GMT -4. The time now is 05:13 AM.