我有一个我写的连接到Oracle的Perl脚本。该脚本在安装了PERL64的计算机上运行良好。我尝试使用ActiveState PerlApp将此脚本转换为EXE。再一次,在我的机器上完美运行。一旦可执行文件位于不包含Perl的计算机上,就会缺少连接到Oracle所需的DLL。
use DBI;
# CONFIG VARIABLES
our $database = "database.app.net";
our $host = "server.app.net";
our $port = "1522";
our $user = "SVC_app";
our $pw = 'Password';
# DATA SOURCE NAME
our $dsn = "dbi:Oracle:$host:$port/$database";
# PERL DBI CONNECT
our $connect = DBI->connect($dsn, $user, $pw);
# PREPARE THE QUERY
our $query = 'SELECT Blah FROM database."table" where "blah" = ?';
our $query_handle = $connect->prepare($query);
# EXECUTE THE QUERY
$query_handle->execute($value);
# BIND TABLE COLUMNS TO VARIABLES
$query_handle->bind_columns(undef, \$return);
# LOOP THROUGH RESULTS
while($query_handle->fetch()) {
#print "$return";
}
我收到的错误是:
无法为模块DBD加载'auto / DBD / Oracle / Oracle.dll':: Oracle:load_file:在/ DynaLoader.pm第224行找不到指定的模块。 < / p>
提前致谢
答案 0 :(得分:1)
有两种情况:
另外,请记住Window对DLL文件有点挑剔。可能会说缺少Oracle.dll,但实际上缺少的可能是其依赖项之一。也许是OCI.dll? 如果您有多个具有相同名称的DLL文件,请尝试确保加载了哪个,因为它可能不是正确的版本。
如果文件在那里,只有一个版本,它们在PATH中并且仍然找不到它们,您可以尝试通过在所需的DLL上运行if (quantity < 0)
{
System.out.println("error message");
}
if (price < 0)
{
System.out.println("error message");
}
命令来手动注册文件。
答案 1 :(得分:1)
您需要在运行EXE的任何计算机上单独安装Oracle客户端。
ActiveState的PDK中的PerlApp不会将Oracle客户端包装到EXE中,因为这样做会违反Oracle的重新分发协议。