私は数日間オンラインで検索しましたが、答えを見つけることができません。Perl DBIはOracleサブクエリファクタリングをサポートしていますか?
Perl DBIはOracleサブクエリファクタリング(つまりWITH句)をサポートしていますか?一例として、さらに以下に簡単な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を変更した場合、この同じアプリケーションが動作しますto:
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データベースビジュアライザーアプリケーションで直接実行される雌鳥。 DBVisualizer)。
PostgreSQLはこの 'common table expressions'を呼び出します。私が覚えている限り、あなたはそれを' prepare'、 'execute'、' fetch * 'のように使います。 – dgw