I can't install the DBI modules to talk to our database, so I am trying to
run some commands from a system call. I am trying to pass some variables
retrieved from command line arguments to the sql statements. Here's my
problem, I can't get the variables to expand for use in the sql code

#!perl -w
use strict;
use warnings;

my ($TABLENAME, $VIEWNAME) = (shift,shift);

system('sqlplus / << SQLEOF
 set heading off
 set linesize 120
  
 spool viewdata.kj
 select table_name,column_name,data_length,data_type from dba_tab_columns
 where table_name = \'$VIEWNAME\'
 and owner = 'XXXX';
 
 spool tabdata.kj
 select table_name,column_name,data_length,data_type from dba_tab_columns
 where table_name = \'$TABLENAME\'
 and owner = 'XXXX';
SQLEOF
');
__END__

The above will execute, but no rows will be selected because the variables
are treated as null. I tried declaring the variables globally but still the
same problem. I also tried to pass the variables to the system call (system
(), ($TABLENAME, $VIEWNAME);) But couldn't get that to work either. $_[0]
was read as "scriptname[0]"..

I can insert a print statement inside the system call and print the
variables to STDOUT, but can't get sql to use them. Am I missing something
blatantly obvious? Any help very much appreciated.

Ken

P.S. I only have modules distributed with perl 5.6.1, and I am not allowed
to install any new ones at the present time.




Reply via email to