CGI-AppBuilder-PLSQL
view release on metacpan or search on metacpan
# set outdir
# if (exists $odr->{$sn}) {
# $pr->{db_outdir} = $odr->{$sn}{db};
# $pr->{web_outdir} = $odr->{$sn}{web};
# } else {
# $pr->{db_outdir} = $ar->{outdir} if exists $ar->{outdir};
# $pr->{web_outdir} = $ar->{outdir} if exists $ar->{outdir};
# }
if (! exists $pr->{web_outdir}) {
$s->echo_msg("ERR: out_dir was not defined.", 0); return;
}
# $pr->{tgt_dir} = join $ds, $pr->{web_outdir}, $sn, $tsk;
# $pr->{log_dir} = join $ds, $pr->{tgt_dir}, $pr->{y4}, $pr->{mm};
# $pr->{sql_fn} = join $ds, $pr->{log_dir}, "s$pr->{dtm}.sql";
# set db connection
my $cs = $pr->{cs};
if (!$cs) {
$s->echo_msg("ERR: ($prg) db connection was not defined.", 0); return;
}
my $cr = {}; # code array ref
if ($ar->{preload_code} && !$p->{is_tasksql}) {
$cr->{plsql_dir} = $ar->{plsql_dir} if exists $ar->{plsql_dir};
$cr->{plsql_dir} = $ar->{ifn_dir} if !$cr->{plsql_dir};
my $pdr = $cr->{plsql_dir};
$s->echo_msg("INFO: ($prg) loading codes from $pdr...", 3);
if (-d $pdr) {
opendir DD, "$pdr" or croak "ERR: could not opendir - $pdr: $!\n";
my @a = sort grep !/\.bak$/, (grep !/^\./, readdir DD);
# map { $s->read_plsql("$pdr/$_",$cr); } sort grep !/\.bak$/, (grep !/^\./, readdir DD);
closedir DD;
for my $x (0..$#a) { my $f = $a[$x];
$s->read_plsql("$pdr/$f",$cr); }
$s->echo_msg($cr,9);
} else {
$s->echo_msg("ERR: ($prg) could not find plsql code dir - $pdr", 0);
}
}
($pr->{mtr_sch}) = ($cs =~ /^(\w+)\//); # db schema
if (!$p->{is_tasksql}) {
# $txt =~ s/,\s*/,\n/g;
$tsk_txt =~ s/;\s*/;\n/g; # add line break back
$tsk_txt =~ s/(declare|begin)/$1\n/ig; # add line break
$tsk_txt = $s->expand_vars($tsk_txt, $pr); # expand param variables
$tsk_txt = $s->expand_vars($tsk_txt, $ar); # expand param variables
$tsk_txt =~ s/(\'?\$a\d+\'?)/null/g; # nullify the missing $a1,$a2,
$tsk_txt =~ s{\/\;\s*}{\/\n}g; # remove ; for /;
$tsk_txt =~ s/(\s*,\s*\w+\s*=>)/\n $1/ig; # add line break
$tsk_txt =~ s/\s+(where|order by|group by)/\n $1/ig; # add line break
$tsk_txt =~ s/(union all|union)/\n$1\n/ig; # add line break
$s->echo_msg("TXT: <pre>\n$tsk_txt\n</pre>",3);
}
# 4. set output directories
$s->echo_msg("4. setting output directories...", 2);
# mkdir $pr->{out_dir}, 0777 if (! -d $pr->{out_dir});
# mkdir $pr->{tgt_dir}, 0777 if (! -d $pr->{tgt_dir});
if (! -d $pr->{log_dir}) {
eval { mkpath($pr->{log_dir},0,0777) };
croak "ERR: could not mkdir - $pr->{log_dir}: $!: $@<br>\n" if ($@);
if ($^O !~ /^MSWin/i) { # non window
system("chmod -R ugo+w $pr->{log_dir}");
}
}
my $radr = $ENV{REMOTE_ADDR}; $radr =~ s/\./_/g;
my $tmpd = join $ds,$pr->{web_outdir},$sn,$radr,$pr->{y4},$pr->{mm},$pr->{dd};
if (! -d $tmpd && ! $pr->{is_tasksql}) {
eval { mkpath($tmpd,0,0777) };
croak "ERR: could not mkdir - $tmpd: $!: $@<br>\n" if ($@);
if ($^O !~ /^MSWin/i) { # non window
system("chmod -R ugo+w $tmpd");
}
}
my $tpf1 = join $ds, $tmpd, "${tsk}_$pr->{tm}.sql";
# 5. compose command
$s->echo_msg("5. composing commands...", 2);
my $rc = {'0'=>'OK', '1'=>'Command is not invoked', '2'=>'Failed'};
my ($svr,$usr,$pwd,$ohm) = ();
my $vhm = 'ORACLE_HOME';
$ohm = $ENV{$vhm} if exists $ENV{$vhm} && $ENV{$vhm};
$ohm = $scn->{orahome} if !$ohm && exists $scn->{orahome};
$svr = $scn->{svr} if exists $scn->{svr};
$usr = $scn->{usr} if exists $scn->{usr};
$pwd = $scn->{pwd} if exists $scn->{pwd};
# my ($svr,$usr,$pwd,$ohm) =
# ($scn->{svr},$scn->{usr},$scn->{pwd},$scn->{orahome});
my $cfn = join $ds, $ohm, 'bin', 'sqlplus'; # command file name
$cfn .= ".exe" if ($^O =~ /^MSWin/i);
$s->echo_msg("INFO: ($prg) CFN set to $cfn", 2);
# if (! -f $cfn) {
# $s->echo_msg("ERR: could not find - $cfn", 0); return;
# }
$pr->{sql_cfn} = $cfn; # command file name
$pr->{sql_cs} = $cs; # connection string
# keep the variables
$ar->{sql_cfn} = $cfn; # command file name
$ar->{sql_cs} = $cs; # connection string
$s->echo_msg($pr, 4);
my ($r1, @a) = ();
if ($^O !~ /^MSWin/i) { # non window
($r1, @a) = rexec($svr, 'ls -l $cfn', $usr, $pwd);
$s->echo_msg("INFO: ($prg) R1: $r1 - $rc->{$r1}", 3); $s->echo_msg(\@a,3);
if ($r1 > 0) {
$s->echo_msg("ERR: ($prg) could not run command - $cfn: $!.", 0);
return;
}
}
my $cmd;
if ($^O !~ /^MSWin/i) { # non window
$cmd = "ORACLE_HOME=$ohm;\nexport ORACLE_HOME;\n";
} else { # window
$cmd = '';
}
if ($p->{is_tasksql}) {
$cmd .= "$cfn -S $cs \@$tsk_fn";
} else {
$s->echo_msg("TXT: <pre>\n$tsk_txt\n</pre>",3);
$s->echo_msg("INFO: ($prg) Writing SQL to $tpf1...",2);
open TMPSQL,">$tpf1" or carp "ERR: could not write to $tpf1: $!\n";
print TMPSQL "$tsk_txt\nexit;\n";
close TMPSQL;
if ($cr) {
$s->expand_code($tpf1, $cr); # expand code variables
$s->expand_code($tpf1, $cr); # expand code variables
$s->expand_code($tpf1, $cr); # expand code variables
}
$cmd .= "$cfn -S $cs \@$tpf1";
croak "ERR: did not find sql file - $tpf1<br>\n" if ! -f $tpf1;
}
( run in 0.708 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )