Я искал в Интернете несколько дней и не могу найти ответ.Поддерживает ли Perl DBI Oracle Subquery Factoring?
Поддерживает ли Perl DBI Oracle Subquery Factoring (т. Е. 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