2016-10-11 5 views
2

며칠 동안 온라인에서 검색 한 결과 답변을 찾을 수 없습니다.Perl DBI는 Oracle 부속 조회를 지원합니까?

Perl DBI는 Oracle 하위 쿼리 인수 (즉 WITH 절)를 지원합니까?

DBD::Oracle::st fetchrow_array failed: ERROR no statement executing (perhaps you need to call execute first) 

간단한 펄 DBI 응용 프로그램 : : 나는 단순히 SQL을 변경하는 경우

#!/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; 

이 동일한 응용 프로그램이 작동 예를 들어

는 간단한 펄 DBI 응용 프로그램은 더 아래의 오류와 함께 실패 ~ :

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).

+0

PostgreSQL은이'common table expressions'을 호출합니다. 그리고 나는 여러분이 그것을 설명하고'prepare','execute' 그리고'fetch *'하는 방식으로 사용합니다. – dgw

답변

1

내 버전의 Perl (5.8.8), DBI (1.58) 및/또는 DBD :: Oracle (1.19)은 Oracle Subquery Factoring을 지원하지 않습니다.

업데이트 된 Perl (5.12.1), DBI (1.613) 및 DBD :: Oracle (1.24) 버전을 통해 동일한 Perl 응용 프로그램을 성공적으로 실행할 수있었습니다.

불행히도 Perl, DBI 및 DBD :: Oracle의 변경 내역을 읽은 후에도 Oracle Subquery Factoring의 지원을 소개 한 구성 요소를 정확히 알지 못합니다. 내 의심은 DBI 오라클 드라이버 (DBD :: Oracle)입니다.

0

Perl DBI가 'WITH'절을 올바르게 처리했습니다. 난 그냥 지금을 확인하고 하나의 사건으로 당신은 그것이라고하십시오

$sth->execute(); 

번 확인 전화를하는 것을 잊지 수있다 에러 코드 따라 테스트가 주석 또는 뭔가 다른했다 할 수있다. 하지만 코드가 올바로 작동합니다.

+0

코드 테스트에 사용한 Perl 및 DBI의 버전은 무엇입니까? – TuAmigoAlejandro