【问题标题】:DBI->Connect failed(install_driver(Oracle) failed: Can't locate DBD/Oracle.pm)DBI-> 连接失败(安装驱动程序(Oracle)失败:找不到 DBD/Oracle.pm)
【发布时间】:2015-08-03 17:02:44
【问题描述】:

我正在通过 html 中的 onclick 事件运行 cgi 脚本。

HTML

<button onclick="self.location='http:**link**/test.cgi?myfield=PRD7-QF_P7';">Click me</button>

test.cgi 脚本

use DBI;
use CGI::Carp qw(carpout fatalsToBrowser);
BEGIN
{
 $ENV{'ORACLE_HOME'}='/data/softs/oracle/10.2.0.3/';
 $ENV{'LD_LIBRARY_PATH'}='/data/softs/oracle/10.2.0.3/lib';
}

my $cgi = CGI->new;
#my $parameter = $cgi->param("myfield");
print "Content-type: text/html\n\n";
my $version = "2.1";
my $cgi = CGI->new;
my $parameter = $cgi->param("myfield");
print "Content-type: text/html\n\n";
print "This is a test perl script\n\n";
print "Parameter=${parameter}\n";
my $connection_details = DBstringToConnection($parameter);

my $AMDORA_TNS_FM = @$connection_details[0];
my $AMDORA_USER_FM = @$connection_details[1];
my $AMDORA_PASSWORD_FM = @$connection_details[2];
my $AMDORA_SCHEMA_FM = @$connection_details[3];
my $AMDORA_SERVICE_FM = @$connection_details[4];

my $dbhfm = DBI->connect("dbi:Oracle:$AMDORA_TNS_FM", $AMDORA_USER_FM,$AMDORA_PASSWORD_FM)
  or die DBI->errstr;

我在文件开头设置了 Oracle_home 和 ld_library_path。 当我从 unix 终端运行 cgi 脚本时,它工作正常。但是当我从浏览器 HTML 文件运行脚本时,它给出了这个错误:

install_driver(Oracle) failed: Can't locate DBD/Oracle.pm in @INC (@INC contains: /usr/lib/perl5/5.10.0/x86_64-linux-thread-multi /usr/lib/perl5/5.10.0 /usr/lib/perl5/site_perl/5.10.0/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.10.0 /usr/lib/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.10.0 /usr/lib/perl5/vendor_perl .) at (eval 9) line 3.

Perhaps the DBD::Oracle perl module hasn't been fully installed,
or perhaps the capitalisation of 'Oracle' isn't right.
Available drivers: DBM, ExampleP, File, Gofer, Proxy, SQLite, Sponge, mysql.
 at /remote/users/sasahu/public_html/dashboard/test.cgi line 47

我认为 DBI->connect 将使用 DBD::Oracle 包进行 Oracle 连接,它在 unix 终端中运行良好,但在浏览器中会出现上述错误。

谁能告诉我如何解决这个问题。 提前致谢。

【问题讨论】:

  • 比较 @INC 和你在 shell 中从 perl -V 得到的那个?
  • 您的@$connection_details[0](以及下面的四行)写成$connection_details-&gt;[0] 远没有那么容易混淆。或者也许将它们全部组合为my ($AMDORA_TNS_FM, $AMDORA_USER_FM, $AMDORA_PASSWORD_FM, $AMDORA_SCHEMA_FM, $AMDORA_SERVICE_FM) = @$connection_details

标签: html oracle perl


【解决方案1】:

看起来您还必须为运行 apache 网络服务器的用户设置环境变量 ORACLE_HOME。并使其在 apache 中可用。

【讨论】:

    猜你喜欢
    • 2018-11-08
    • 2012-11-15
    • 2016-01-07
    • 1970-01-01
    • 2022-08-21
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 2019-08-04
    相关资源
    最近更新 更多