【问题标题】:Querying multiple times in Oracle using perl returns only the first query使用 perl 在 Oracle 中多次查询仅返回第一个查询
【发布时间】:2013-03-18 21:57:44
【问题描述】:

注意:我已经更正了变量差异,它确实打印了第一组的查询,但它没有返回第二组的任何内容。如果我只使用第二组,它会起作用。

在下面的代码中,我有一些数组,它是数组的数组,该数组包含名称之类的文本。所以 @some_array= ([sam, jon, july],[Mike, Han,Tommy],[angie, sita, lanny]); 现在,当我首先查询 'sam jon july' 和 'mike han tommy' 这样的列表时。只有执行从第一个列表中返回结果,其他人是 undef。我不知道为什么会有任何帮助。

my $pointer;
my $db = $db->prepare_cached("
        begin
                :pointer := myFun(:A1);
        end;
                ") or die "Couldn't prepare stat: " . $db->errstr;
$db->bind_param_inout(":pointer",\$pointer,0,{ ora_type => ORA_RSET });

for (my $i=0; $i < @some_array ; $i++) {
        my @firstarray = @{$some_array[$i]};
        my $sql = lc(join(" ", @firstarray));
        print "<pre>$sql</pre>\n";
        $db->bind_param(":A1",$sql);
        $db->execute();
        print "<pre>".Dumper($db->execute())."</pre>\n";
 }

【问题讨论】:

  • 这不可能是你的真实代码,不是吗?为什么@sql$sql 初始化了但没有使用,而@query$query 使用了但没有初始化?什么是 $db$dbh$sdh,为什么它们的使用看起来如此不一致?今后,请努力发布可编译、运行和演示您遇到的问题的代码。
  • 对于变量差异我很抱歉,我已经更正了。它也打印结果,但对于第一组只有第二组返回 undef。如果我首先使用第二组,那么它将只返回第二组。所以问题是它只返回第一组。

标签: database oracle perl dbi data-dumper


【解决方案1】:

就像大家在the last question you asked 上告诉你的那样,用括号初始化你的数组,而不是嵌套括号。

@some_array= ([sam, jon, july],[Mike, Han,Tommy],[angie, sita, lanny])

不是

@some_array= [[sam, jon, july],[Mike, Han,Tommy],[angie, sita, lanny]]

您也将从中受益匪浅

use strict;
use warnings;

在所有程序的顶部。这会捕捉到您尝试初始化@some_array 的奇怪方式,并且会捕捉到您对@sql@query 的不一致使用。 更新$sdh$db$dbh

【讨论】:

  • 我已经按照你说的进行了编辑,也使用了 strict 和 warnings 但没有帮助。
猜你喜欢
  • 2021-02-16
  • 1970-01-01
  • 2012-10-10
  • 2020-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
  • 2018-03-20
相关资源
最近更新 更多