- 论坛徽章:
- 0
|
我在windows环境下,用perl执行oracle的sqlplus命令,能够执行:
system "
sqlplus \"system/oracle\@PROD\" \<\<EOF
select count(*) from dba_users;
EOF
";
然后,我想用sqlplus命令,执行一个SQL文件,这个SQL文件会将输出spool到这个目录:spool ${MY_SPOOL_LOG}
结果,我这样执行之后,SQL文件目录下多了一个${MY_SPOOL+LOG}文件,而不是我期望的那样,生成我指定的文件名:
my $file = "general_sql/0010_version.sql";
$ENV{MY_SPOOL_LOG} = "oracle_sql_spool/0010_version.log";
### %ENV
system "sqlplus \"system/oracle\@PROD\" \@$file";
0010_version.sql的内容是这样的:
spool ${MY_SPOOL_LOG}
column PRODUCT format a45
column VERSION format a15
column STATUS format a18
SELECT PRODUCT,version,status FROM product_component_version;
spool off
exit;
看起来,是$ENV{MY_SPOOL_LOG} = "oracle_sql_spool/0010_version.log"; 这条语句,并没有把环境变量传递给system命令。
我用### %ENV,是能够看到$ENV{MY_SPOOL_LOG}变量的内容的:
### MY_SPOOL_LOG => 'oracle_sql_spool/0010_version.log',
能够有办法将$ENV{MY_SPOOL_LOG}传递给system执行吗?
谢谢! |
|