#!/usr/local/bin/perl #============ EXTERNAL LIBRARIES use DBI; #============ EXPORTED ENVIRONMENT VARIABLES if (! (defined $ENV{"ORACLE_HOME"} and (defined $ENV{"ORACLE_SID"} or defined $ENV{"TWO_TASK"}))) { &Usage; exit ; } $ENV{"TWO_TASK"} = $ENV{"ORACLE_SID"} unless (defined $ENV{"TWO_TASK"}) ; $ENV{"ORACLE_SID"} = $ENV{"TWO_TASK"} unless (defined $ENV{"ORACLE_SID"}) ; if (defined($ENV{'LD_LIBRARY_PATH'})) { $LD_LIBRARY_PATH_DFLT = $ENV{'LD_LIBRARY_PATH'}; $LD_LIBRARY_PATH = "$ORACLE_HOME/lib:$LD_LIBRARY_PATH_DFLT:/usr/ucblib"; } else { $LD_LIBRARY_PATH_DFLT = ""; $LD_LIBRARY_PATH = "$ORACLE_HOME/lib:/usr/ucblib"; } $ORACLE_PATH = "$ORACLE_HOME/bin"; $ENV{"LD_LIBRARY_PATH"} = $LD_LIBRARY_PATH; $ENV{"PATH"} .= ":$ORACLE_PATH"; #==================== MAIN PROGRAM ====================# $|=1; $arg0 = $ARGV[0] ; $arg1 = $ARGV[1] ; if (length($arg0) == 0 || length($arg1) == 0) { &Usage ; } else { ($ORACLE_USER, $ORACLE_PASSWORD) = split(/\//, $arg0) ; &fetchquery_2stdout($arg1) ; } exit ; #==================== DIAGNOSTICS ====================# sub Usage { print STDOUT ("Usage\n") ; print STDOUT ("\t$0 user/password \"query\"\n") ; print STDOUT ("where\n") ; print STDOUT ("\tuser/password : oracle user, password delimited by '/'\n"); print STDOUT ("\tquery : sql select clause\n"); print STDOUT ("Environment Variables\n") ; print STDOUT ("\tORACLE_HOME - required\n"); print STDOUT ("\tORACLE_SID or TWO_TASK - required\n"); print STDOUT ("Examples\n") ; print STDOUT ("\t$0 fred/barney \"select * from ESTUARYFISH\" | more\n") ; print STDOUT ("\t$0 \$LN \"select distinct CNAME from ESTUARYFISH\" | grep -i trout\n") ; print STDOUT ("\t$0 \$LN \"select distinct TAXON_NAME, URL from ESTUARYFISH where CNAME like '%Trout%'\"\n") ; print STDOUT ("Note\n") ; print STDOUT ("\tThis routine will not fetch LONG or LONG RAW values.\n") ; print STDOUT ("\tUse table_manager.pl instead.\n") ; return; } #==================== FUNCTIONS ====================# sub fetchquery_2stdout { my ($query) = @_ ; my $dbh = DBI->connect("dbi:Oracle:", $ORACLE_USER, $ORACLE_PASSWORD, { RaiseError=>1, AutoCommit=>0, LongTruncOk=>0}) ; my $sth = $dbh->prepare($query) ; $sth->execute; while (my @row_ary = $sth->fetchrow_array) { print STDOUT ("$row_ary[$0]") ; for (my $t=1; $t<@row_ary; $t++) { print STDOUT ("\t$row_ary[$t]") ; } print STDOUT ("\n") ; } $sth->finish; $dbh->disconnect; return; }