免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5471 | 回复: 9
打印 上一主题 下一主题

32位perl如何读取64位oracle? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-12-13 17:32 |显示全部楼层 |倒序浏览
如题:

网上查询了一下,都是说因为32位perl不能访问64位oracle的数据库。

请问如下错误如何解决:

Can't load 'C:/Perl/lib/auto/DBD/Oracle/Oracle.dll' for module DBD::Oracle: load_file:找不到指定的模块。 at C:/Perl/lib/DynaLoader.pm line 191.


我用64位的perl,没有错误~!

谢谢~!

论坛徽章:
0
2 [报告]
发表于 2016-12-13 23:34 |显示全部楼层
本帖最后由 beyondlee1 于 2016-12-13 23:39 编辑

你没明白我的问题,
我指用32位perl程序脚本访问64位oracle数据库
不是指用PL/SQL之类的软件

论坛徽章:
0
3 [报告]
发表于 2016-12-14 18:49 |显示全部楼层
本帖最后由 beyondlee1 于 2016-12-14 18:53 编辑

我现在就是用perl写的程序访问oracle,
安装的64的activeperl可以正常访问和编译,
但换在32位windows,如xp下,就出现上述错误。

能否说一下简单步骤,如何解决?
注:64位和32位perl安装的模块是一样的。

论坛徽章:
0
4 [报告]
发表于 2016-12-15 09:09 |显示全部楼层
本帖最后由 beyondlee1 于 2016-12-15 09:14 编辑

请问一下,你这段代码是在Linux环境写的,我在windows环境,
这个要怎么改:
  1. $ENV{DBI_AUTOPROXY}='dbi:Proxy:hostname=133.2.2.5;port=3333';
复制代码


还有,
  1. DBI:Proxy
复制代码

这个模块我没找到啊?是叫
  1. DBI:Proxy ??
复制代码


$ vi b.pl
use strict;
use DBI;
$ENV{DBI_AUTOPROXY}='dbiroxy:hostname=133.2.2.5;port=3333';
my ($dbh,$sth);
my $user = 'ai_sel';
my $pass ='jbjbjbjb';
my $remote="dbi:Oracle:crmdb1";
$dbh = DBI->connect($remote, $user, $pass) ||die "connect did not work: $DBI::errstr";
my $sql = " SELECT service_num ,subscription_id
                  FROM hiucrm1o.ucs_subscription
                  WHERE ROWNUM<200";
printf $sql."\n";
$sth=$dbh->prepare($sql);
$sth->execute();
my @ora_cursors=();
while(@ora_cursors=$sth->fetchrow_array)
{
  print  $ora_cursors[0]."||".$ora_cursors[1]."\n";

$sth->finish();
$dbh->disconnect();         

论坛徽章:
0
5 [报告]
发表于 2016-12-15 11:38 |显示全部楼层
本帖最后由 beyondlee1 于 2016-12-15 11:40 编辑
  1. use DBI;
  2. #use DBD::Oracle;
  3. #my $tnsname="inmind";
  4. my $username="oly";
  5. my $password="cedb1";
  6. my $proxy='dbi.Proxy:hostname=192.168.2.37;port=1521';
  7. my $remote="dbi:Oracle:INMIND";
  8. my $dbh;
  9.                         $dbh = DBI->connect($proxy.";dsn=".$remote, $username, $password) ||die "connect did not work: $DBI::errstr";
复制代码


是这样吗?INMIND是数据库名

出错如下:
Error: Can't connect to data source 'dbi.Proxy:hostname=192.168.2.37;port=1521;dsn=dbi:Oracle:INMIND'
because I can't work out what driver to use (it does't seem to contain a 'dbi:driver:' prefix and the DBI_DRIVER env var is not set ) at ........123.pl line 1371

论坛徽章:
0
6 [报告]
发表于 2016-12-15 11:39 |显示全部楼层
本帖最后由 beyondlee1 于 2016-12-15 11:41 编辑
  1. use DBI;
  2. #use DBD::Oracle;
  3. #my $tnsname="inmind";
  4. my $username="oly1";
  5. my $password="cedb1";
  6. my $proxy='dbi.Proxy:hostname=192.168.2.37;port=1521';
  7. my $remote="dbi:Oracle:INMIND";
  8. my $dbh;
  9.                         $dbh = DBI->connect($proxy.";dsn=".$remote, $username, $password) ||die "connect did not work: $DBI::errstr";
复制代码


是这样吗?INMIND是数据库名

出错如下:
Error: Can't connect to data source 'dbi.Proxy:hostname=192.168.2.37;port=1521;dsn=dbi:Oracle:INMIND'
because I can't work out what driver to use (it does't seem to contain a 'dbi:driver:' prefix and the DBI_DRIVER env var is not set ) at ........123.pl line 1371

论坛徽章:
0
7 [报告]
发表于 2016-12-15 13:33 |显示全部楼层
本帖最后由 beyondlee1 于 2016-12-15 13:40 编辑

这么说,程序电脑一定要能上网才行。

谢谢~!
我想,PERL连接SQL Server可以用ODBC方式连接,ORACLE就不行吗?(在已经安装ORACLE Instant Client及配置好ODBC连接的前提下)

论坛徽章:
0
8 [报告]
发表于 2016-12-15 13:52 |显示全部楼层
我安装好oracle instant client 11.1,并且配置好tnsnames.ora之后,

ODBC里多一个Oracle in instantclient11_1

用这个建立一个ODBC连接,并且测试也提示成功。

但我没测试好,在PERL脚本里应该怎么写连接。

我想应该可以用ODBC方式连接吧

论坛徽章:
0
9 [报告]
发表于 2016-12-15 17:06 |显示全部楼层
如果在ODBC里已经定义好了,可以使用如下格式查询,貌似仅限于查询:

  1. use warnings;

  2. use DBI;
  3. use Win32::ODBC;

  4. my $dbh= new Win32::ODBC("DSN=inmind;UID=oly;PWD=123456")
  5.         || die "Error: " . Win32::ODBC::Error();

  6. $dbh->Sql("select root_id,job_name,mrp_name,mrp_rev_description from RPT_JOB_STACKUP_CONT_LIST t where root_id='934430'");
  7. my @row;
  8. while($dbh->fetchrow())
  9. {
  10.         @row = $dbh->Data;
  11. print @row,"\n";
  12. }
  13. $dbh->Close();
复制代码


我测试可以了。

论坛徽章:
0
10 [报告]
发表于 2016-12-15 19:33 |显示全部楼层
明白了,我通过ODBC访问,也是要安装ORACLE ODBC 驱动的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP