Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在没有DBI的Oracle DB上以Perl执行SQL语句?_Perl_Sh_Dbi - Fatal编程技术网

在没有DBI的Oracle DB上以Perl执行SQL语句?

在没有DBI的Oracle DB上以Perl执行SQL语句?,perl,sh,dbi,Perl,Sh,Dbi,我们正在尝试使用Perl在Oracle数据库上执行日常维护任务。我有用户访问数据库的权限,并且正在数据库上本地执行所有脚本。我想在数据库上运行SQL语句,生成一个pfile并将其保存到tmp文件夹,以便以后查看 但是,我们的系统上没有安装DBI,因此我无法使用它连接到DB并执行SQL语句。我有管理员权限,但我们试图避免使用DBI,因为此脚本将在每台机器上本地部署,并且我们不希望在所有数据库上安装DBI。如果您在Oracle db上本地运行脚本,是否有任何可能的方法可以在不使用DBI的情况下在Or

我们正在尝试使用Perl在Oracle数据库上执行日常维护任务。我有用户访问数据库的权限,并且正在数据库上本地执行所有脚本。我想在数据库上运行SQL语句,生成一个pfile并将其保存到tmp文件夹,以便以后查看

但是,我们的系统上没有安装DBI,因此我无法使用它连接到DB并执行SQL语句。我有管理员权限,但我们试图避免使用DBI,因为此脚本将在每台机器上本地部署,并且我们不希望在所有数据库上安装DBI。如果您在Oracle db上本地运行脚本,是否有任何可能的方法可以在不使用DBI的情况下在Oracle db上执行SQL语句

例如,我需要运行以下SQL语句才能生成pfile:

create pfile='/tmp/pfile.ora' from spfile
如果我手动执行此操作,我将不得不使用su作为
oracle
,然后在机器上启动
sqlplus
,以执行SQL语句。我试图通过将这些命令放入here文档,然后将其放入
system()
函数中来模拟这一点:

my $result =<<EOF;
su - oracle
sqlplus / as sysdba
create pfile='/tmp/pfile.ora' from spfile;
exit
EOF

system($result);
my $result = 'sqlplus / as sysdba <<EOF;
create pfile=\'/tmp/pfile.ora\' from spfile;
exit;
EOF
';

system($result);

my$result=要运行多个命令,在其间等待响应,您需要使用模块。但是,这不在perl核心中,因此如果没有DBI,那么可能也没有Expect。如果您打算以任何方式安装模块,那么您最好安装DBI并以正确的方式进行安装

但是,可以通过以下方式在一行中完成此操作:

open my $of, ">", "/tmp/pfile.sql";
$of->print("create pfile='/tmp/pfile.ora' from spfile");
close $of;
system("su - oracle -c 'sqlplus / as sysdba < /tmp/pfile.sql'");
打开我的$of,“>”,“/tmp/pfile.sql”;
$of->print(“从spfile创建pfile='/tmp/pfile.ora”);
接近$of;
系统(“su-oracle-c'sqlplus/as sysdba
我通过将SQL命令集放在字符串中,然后使用
system()
函数执行它,成功地完成了这项工作:

my $result =<<EOF;
su - oracle
sqlplus / as sysdba
create pfile='/tmp/pfile.ora' from spfile;
exit
EOF

system($result);
my $result = 'sqlplus / as sysdba <<EOF;
create pfile=\'/tmp/pfile.ora\' from spfile;
exit;
EOF
';

system($result);
my$result='sqlplus/as sysdba