2011-05-12 4 views
0

perl 및 DBI 모듈에서 이상한 문제가 있습니다. 나는 성공적 때로는 쿼리를 얻을 수 있지만 원격으로 같은 데이터베이스 액세스 또는 아무것도에 관련 코드의 라인을 추가 할 때 때때로, 나는 말하는 오류가 발생했습니다 :DBD :: Oracle 및 DBI perl에서 오류가 발생했습니다.

DBD::Oracle::st fetchrow_array failed: ERROR no statement executing (perhaps you need to call execute first) [for Statement "select * from (...)"] at script.pl line 18.

나는 내 선택이 SQLPLUS를 사용하여 확인

DBD::Oracle::db prepare failed: ORA-00911: invalid character (DBD ERROR: error possibly near <*> indicator at char 970 in 'select * from (...)<*>;') [for Statement "select * from (...);"] at script.pl line 13.

: 명령 (! 내가 스크립트가 가끔 일 밝혔다 이유는 물론, 즉)

내가 펄 스크립트의 선택 명령 다음에 세미콜론을 추가 한 경우, 내 말은 또 다른 오류가 발생했습니다 여기에 문제가 없습니다

아무도 그에게 무슨 일이 일어나고 있는지 나에게 제안 해 줄 수 있습니까? 레? SQL 명령이 너무 길기 때문에 (~ 900 자)?

+1

아마도 스크립트를 처음부터 20 줄 정도 보여 주어야합니다. 기회가되면 루프에서 수행하는 내용이 귀하의 진술을 방해합니다. 설명서를 읽었습니까? 'perldoc DBD :: Oracle' 또는 [DBD :: Oracle] (http://search.cpan.org/perldoc?DBD::Oracle)을보십시오. 'perldoc DBI' 또는 [DBI] (http://search.cpan.org/perldoc?DBI)도 있습니다. 일부 드라이버는 한 번에 두 개의 명령문 핸들을 활성화하거나 유사한 규칙을 사용하는 데 이상한 제한이 있습니다. –

답변

2

이 오류는 귀하가 성명서를 준비했지만 실행하지 않았다는 것을 의미합니다. 명령문을 준비하고 실행 한 다음 모든 행을 가져온 다음 다시 가져 오기를 호출하는 경우에도 얻을 수 있습니다. 그러나 이에 대해서는 확실하지 않습니다. 이 경우 필수가 아니므로 세미콜론을 SQL의 끝에 두지 마십시오.

실행 된 속성에 대해서는 https://metacpan.org/pod/DBI#Executed을 참조하십시오.

+0

답장을 보내 주셔서 감사합니다. 나는'prepare()'다음에'execute()'를 사용하고'fetchrow_array' 만 사용했습니다. 나는 이제 SQL의 끝에 세미콜론을 넣지 말아야한다는 것을 알고있다. 그러나 나는 여전히 이상한 오류를 겪고있다. –

+0

다음 코드를 더 보자. – bohica

+0

"SQL의 끝에 세미콜론을 넣지 마십시오 **이 필요 없습니다 **." - 그건 ** 잘못된 ** 대신에 ** 필수적이지 않은 것 같았습니다. 제 문제는 그 것이 었습니다. – mavili

0

나는 같은 문제가 있었는데, 나는 가져온 후에 fetchrow_array를 발견했다. 이것이 문제였다.

while ($sth->fetch) { 

    sth->fetchrow_array; 
    $myvar = some logic here 
    $myvar2 = some other logic here 

} 

sth-> fetchrow_array를 제거했습니다. 이제 모든 것이 작동 중입니다 :)