【问题标题】:perl DBI : ressource temporarily unavailableperl DBI:资源暂时不可用
【发布时间】:2020-01-17 07:19:01
【问题描述】:

我想使用第一个请求来解析数据库以检索问题列表,然后检索问题中包含的每个项目的数据库中的所有字段。

CachéDB 是一个专有数据库,我不明白我的公司为什么要使用它。老板说:快,面向对象。我们必须使用它。

 #! /usr/bin/perl
 use DBI;
 # my DB is a cache DBI 
 (...)
 $connStr = sprintf(join(';','DRIVER=libcacheodbc.so;SERVER=%s;PORT=%s'
                            ,'DATABASE=%s;PROTOCOL=TCP;UID=%s;PWD=%s'
                            ,'STATIC CURSORS=0;'
                        )
                   ,'127.0.0.1', ... , $usr, $pass
                   );
 my $dbh  = DBI->connect( $connStr , $user , $pass) or die $! ; 
 my $req1 = $dbh->prepare("Select ip, max(date) as maxdate 
                            from dbtable 
                            group by ip having count(*) > 1");
 # TODO: Purge not requested records from the DB.
 my $req2 = $dbh->prepare("select * 
                            from dbtable 
                            where ip = ? and date < ?");
 my $ans1 = $req1->execute() or die $! ;
 while(defined (my $problem_ip = $ans1->fecthrow_hashref())) {
      my  $ans2 = $req2->execute( $problem_ip->{'ip'}
                                , $problem_ip->{'maxdate'}
                                );
      # $ans2 eq '0E0'
      # $! eq 'Ressource temporarily unavailable'

      use Data::Dumper; 
      print Dumper $ans2->fetchall_hashref() ;
      # will fails : Not a reference.

      ... 
      # use stuff
 }

请求 ($req1 && $req2) 似乎单独工作(当进程停止时)。

如何处理 cacheDB 以同时从多个请求中检索数据?

【问题讨论】:

  • 对每个请求使用单独的连接。
  • 使用第二个连接,连接函数调用了两次(相同的用户,相同的一切)似乎无法解决问题。
  • 但最让我困惑的是你的 $ans1$ans2 变量。它们都是从调用execute() 的返回值创建的。但是execute() 返回一个标量值(真/假标志或更新的行数)。它从不返回一个对象,但你试图调用这些变量的方法,就好像它们是语句句柄一样。我不知道$ans1-&gt;fecthrow_hashref() 是如何工作的(但是方法名称中的拼写错误让我怀疑你的所有代码!)
  • 1.609 版于十年前发布。你为什么用这么老的软件?
  • 请注意 $!不包含 DBI 错误,因此您可能会看到虚假的错误消息。您需要改用 $DBI::errstr。

标签: perl dbi


【解决方案1】:

上次我使用 Interystem Cache 时,他们提供了“Intersys::PERLBIND”库,您必须在本地计算机上构建它。

https://cedocs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GBPL_intro

如何使用 - https://cedocs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GBPL_using_basics

与您的组织核实,他们应该有这个模块,或者由于您的组织正在使用 Intersyscache,您可以联系那里的数据库支持,我如何让这个东西工作。

附: CachéDB 是一个专有数据库,我不明白我的公司为什么要使用它。老板说:快,面向对象 --> 感觉你,到处都是一样的说法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-21
    • 2018-08-04
    • 2021-05-07
    • 2018-02-24
    • 2016-01-25
    • 2012-04-25
    • 2018-03-11
    • 1970-01-01
    相关资源
    最近更新 更多