我在网上搜索了几天,找不到答案。Perl DBI是否支持Oracle Subquery保理?
Perl DBI是否支持Oracle子查询因子分析(即WITH-clause)?
作为一个例子,简单的Perl DBI应用程序下进一步失败,出现错误:
DBD::Oracle::st fetchrow_array failed: ERROR no statement executing (perhaps you need to call execute first)
简单的Perl DBI应用:
#!/bin/perl
use DBI;
my $sql = <<END_SQL;
WITH w AS
(
SELECT wafer_seq
FROM wafer
WHERE load_time > sysdate - 1
)
SELECT v.*
FROM vwafer v, w
WHERE v.wafer_seq = w.wafer_seq
ORDER BY v.wafer_seq
END_SQL
my $dbh = DBI->connect('DBI:Oracle:<schema_id>', '<username>', '<password>');
my $sth = $dbh->prepare($sql) || die "ERROR PREP";
$sth->execute() || die "ERROR EXEC";
while (my @row = $sth->fetchrow_array())
{
print "@row\n";
}
$sth->finish();
$dbh->disconnect();
exit 0;
此相同的应用程序将工作,如果我只需更改SQL到:
SELECT v.*
FROM vwafer v,
(
SELECT wafer_seq
FROM wafer
WHERE load_time > sysdate - 1
) w
WHERE v.wafer_seq = w.wafer_seq
ORDER BY v.wafer_seq
最后,我证实了上述两个SQL工作w直接在数据库可视化应用程序中执行(例如, DBVisualizer中)。
PostgreSQL调用这个“通用表表达式”,并且据我记得,我只是用它来描述它,'prepare','execute'和'fetch *'。 – dgw