是的,您可以使用 DBI 和 DBD::Oracle 模块。
但是,Oracle 存在一些问题。我记得 Oracle 8 的一些有趣和游戏,因此这些可能不再适用,但在某些情况下确实需要设置 ENV 变量,如 ORACLE_HOME、ORACLE_BASE 和 ORACLE_SID。
DBD::Oracle 文档确实对此进行了说明,并且还提到了另一个 ENV 变量 TWO_TASK。所以让它工作可能取决于....
- 您运行的是什么版本的 Oracle
- 您是否有监听器(我认为您确实需要像 CGI 一样进行网络访问?)
- 您使用的是什么版本的 SQL*Net。
似乎令人生畏,但您可能需要的只是在网络服务器中添加这些 ENV 变量(我当时使用的是 iPlanet)。或者来自它提供的 DBD::Oracle 文档...
BEGIN {
$ENV{ORACLE_HOME} = '/home/oracle/product/10.x.x';
$ENV{TWO_TASK} = 'DB';
}
$dbh = DBI->connect('dbi:Oracle:','scott', 'tiger');
# - or -
$dbh = DBI->connect('dbi:Oracle:','scott/tiger');
PS。以上假设您在与 Oracle 相同的服务器上运行 CGI 脚本!如果不是,那么那些 ENV 变量是多余的,您可以这样做(从我的旧脚本中提取!)...
my $db = DBI->connect("dbi:Oracle:host=$host;sid=$database", $user, $pass,
{ RaiseError => 0, PrintError => 0 } )
or croak( "Unable to connect to DB - $DBI::errstr" );
但是我确实记得必须在 Oracle 服务器上调整诸如 TNLISTENER.CONF 之类的东西(这是几年前的事了,所以我有点记不住!)而且我很确定你需要下载一些客户端 Oracle 库(你可以从他们的网站获取)。