| < Day Day Up > |
|
In Example 9-42 is a sample script to generate DB2 UDB UPDATE commands from Oracle control files.
Example 9-42: Generation of additional DB2 update commands
#!/usr/bin/perl # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Script: gen_load_update.pl # Author: Stefan Hummel # Date: 07/31/2003 # # Syntax: perl gen_load_update.pl -c <controlfile> # # Description: Generation of additional UPDATE commands for DB2 UDB # regarding to an Oracle control file # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # use Text::ParseWords; # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # initialization # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $tablename = '<missing>'; # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # functions # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # sub usage { printf("USAGE: perl gen_load_update.pl -c controlfile\n\n"); exit; }; sub read_controlfile { $delim = '\s+'; $i = 1; open(CTLFILE, $_[0]); @ctl_lines = <CTLFILE>; foreach (@ctl_lines) { @words = &parse_line($delim, 1, $_); foreach (@words) { @parts = split (/([,])/, $_); $n = 0; foreach (@parts) { $array[$i++] = $parts[$n++] } } } $max_line = $i-1; close(CTLFILE); }; sub current_columnname { $x = $_[0] - 1; while (('(' ne $array[$x]) && (',' ne $array[$x]) && ($x > 0)) { $x--; } return $array[$x + 1]; }; sub parse_nullif { $i++; $condition[$c][0] = $tablename; # tablename $condition[$c][1] = ¤t_columnname($i); # tablename $condition[$c][2] = 'NULL'; # set condition $condition[$c][3] = $array[$i]; # where clause $c++; }; sub parse_defaultif { $i++; $condition[$c][0] = $tablename; # tablename $condition[$c][1] = ¤t_columnname($i); # tablename $condition[$c][2] = 'DEFAULT'; # set condition $condition[$c][3] = $array[$i]; # where clause $c++; }; sub parse_into { $i++; $i++; $tablename = $array[$i]; }; # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # main # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # read the parameters while ($parameter=shift(@ARGV)) { if ("-c" eq $parameter) { $filename = shift @ARGV; }; }; if ('' eq $filename) { &usage; } # read the control file, save each word in array &read_controlfile($filename); # read array and parse commands $i = 1; $c = 1; while ($i <= $max_line) { if ("NULLIF" eq uc($array[$i])) { # print "NULLIF !!!" &parse_nullif; } elsif ("DEFAULTIF" eq uc($array[$i])) { # print "NULLIF !!!" &parse_defaultif; } elsif ("INTO" eq uc($array[$i])) { &parse_into; }; $i++; }; $max_condition = $c; # generate DB2 update commend for ($n=1;$n<$max_condition;$n++) { printf("UPDATE %s\n" ,$condition[$n][0]); printf("SET %s=%s\n" ,$condition[$n][1] ,$condition[$n][2]); printf("WHERE %s\);\n\n" ,$condition[$n][3]); };
| < Day Day Up > |
|