首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译为Windows可执行文件的Perl脚本不连接到Oracle

编译为Windows可执行文件的Perl脚本不连接到Oracle
EN

Stack Overflow用户
提问于 2016-07-12 21:17:23
回答 2查看 491关注 0票数 0

我已经编写了一个与Oracle连接的Perl脚本。这个脚本在安装了PERL64的机器上运行得很好。我试图使用ActiveState PerlApp将这个脚本转换为EXE。再一次,在我的机器上工作得很好。一旦可执行文件在不包含Perl的机器上,就缺少了连接到Oracle所需的DLL。

代码语言:javascript
复制
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";
} 

我收到的错误是:

无法在/DynaLoader.pm第224行找到模块DBD::load_file:The指定的模块的“auto/DBD/Oracle/Oracle.dll”。

提前感谢

EN

回答 2

Stack Overflow用户

发布于 2016-07-13 07:27:29

有两种情况:

  • 如果目标计算机上没有DLL文件,它将无法工作。DLL文件没有链接到可执行文件(顾名思义,它们是动态链接库,而不是静态库)
  • 如果目标计算机上确实有DLL文件,但是找不到它们,那么就有一些可能的解释。例如,文件可能不在路径中。或者文件可能没有正确的权限,特别是当您从类似于服务(默认情况下运行在具有不同权限的系统帐户上)调用可执行文件时。

另外,请记住,这个窗口对DLL文件有点挑剔。它可能说Oracle.dll缺失了,但实际上缺少的可能是它的依赖项之一。也许是OCI.dll?如果您有多个具有相同名称的DLL文件,请确保加载了哪个DLL文件,因为它可能不是正确的版本。

如果文件在那里,它们只有一个版本,它们在路径中,它仍然找不到它们,您可以尝试通过在所需的DLL上运行regsvr32命令来手动注册这些文件。

票数 1
EN

Stack Overflow用户

发布于 2016-07-14 16:27:34

您需要在运行EXE的任何计算机上分别安装Oracle客户端。

ActiveState的PDK中的PerlApp不会将Oracle封装到EXE中,因为这样做将违反Oracle的再分发协议。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38339035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档