Thread View: pl.comp.lang.perl
2 messages
2 total messages
Started by menth0l
Mon, 08 Feb 2010 18:02
DBD::Oracle i problem z "wyciaganiem" CLOB-a
Author: menth0l
Date: Mon, 08 Feb 2010 18:02
Date: Mon, 08 Feb 2010 18:02
45 lines
2638 bytes
2638 bytes
Dziś natrafiłem na dziwny problem.. Otóż mam tabelkę (BD: Oracle 10g
Express), w której jednym z pól jest CLOB. Próbowałem wyciągać dane z
tabeli za pomocą składowanej procedury (piszę kod z pamięci- chodzi raczej
o ideę):
use DBI;
use DBD::Oracle qw(:ora_types);
(...)
my $resultset;
my $stmt = $connection.prepare("BEGIN\nSP_GETRECS(:1);\nEND;");
$stmt->bind_param_inout(1, \$resultset, 0, { ora_type => ORA_RSET });
$stmt->execute; # wykonuje sie bez bledow
my $records = $resultset->fetchall_arrayref; # perl sie wywala
Przy wywołaniu metod fetch* na danych zwroconych po execute interpreter
perla się po prostu wywala (win32, wyskakuje slynne okienko z przyciskiem
'nie wysyłaj').
Metodą prób i błędów ustaliłem, że winne temu jest pole typu CLOB.
Usuwając je z zapytania w procedurze powyższy kod działa poprawnie. Co
ciekawe, jawne wywołanie zapytania:
my $stmt = $connection->prepare("SELECT * FROM TABELA");
$stmt->execute;
$data = $stmt->fetchall_arrayref
..działa poprawnie (trzeba tylko ustawić odpowiednia wartość dla
LongReadLen w parametrach połączenia ale i bez tego nie dochodzi do zwisu
interpretera).
Z przyczyn niezależnych ode mnie nie mogę jednak zrezygnować z użycia
procedury i przekazywania rekordów poprzez zmienna typu REF CURSOR. Czy
ktoś może spotkał się z tym problemem? Może chociaż jakieś sugestie co
jeszcze sprawdzić/czego się czepić bo przyznam ze pomysły powoli mi się
konczą a rozwiązania nie widać. W googlu nie nic znalazłem na temat takich
problemów, z tego co wyczytałem powinno działać to jak każde inne
zapytanie.. Czy możliwe, że nie jest to wina DBI tylko np. wadliwego
sterownika lub złej konfiguracji serwera/czegoś innego? Wszelkie sugestie
mile widziane :)
Platforma: win32, perl 5.10.1
--
pozdrawiam,
menth0l
Re: DBD::Oracle i problem z "wyciaganiem" CLOB-a
Author: menth0l
Date: Fri, 26 Feb 2010 07:19
Date: Fri, 26 Feb 2010 07:19
43 lines
3307 bytes
3307 bytes
On 8 Lut, 19:02, menth0l <ment...@remove.this.o2.pl> wrote:
> Dziś natrafiłem na dziwny problem.. Otóż mam tabelkę (BD: Oracle 10g
> Express), w której jednym z pól jest CLOB. Próbowałem wyciągać dane z
> tabeli za pomocą składowanej procedury (piszę kod z pamięci- chodzi raczej
> o ideę):
>
> use DBI;
> use DBD::Oracle qw(:ora_types);
> (...)
> my $resultset;
> my $stmt = $connection.prepare("BEGIN\nSP_GETRECS(:1);\nEND;");
> $stmt->bind_param_inout(1, \$resultset, 0, { ora_type => ORA_RSET });
> $stmt->execute; # wykonuje sie bez bledow
> my $records = $resultset->fetchall_arrayref; # perl sie wywala
>
> Przy wywołaniu metod fetch* na danych zwroconych po execute interpreter
> perla się po prostu wywala (win32, wyskakuje slynne okienko z przyciskiem
> 'nie wysyłaj').
>
> Metodą prób i błędów ustaliłem, że winne temu jest pole typu CLOB.
> Usuwając je z zapytania w procedurze powyższy kod działa poprawnie. Co
> ciekawe, jawne wywołanie zapytania:
>
> my $stmt = $connection->prepare("SELECT * FROM TABELA");
> $stmt->execute;
> $data = $stmt->fetchall_arrayref
>
> ..działa poprawnie (trzeba tylko ustawić odpowiednia wartość dla
> LongReadLen w parametrach połączenia ale i bez tego nie dochodzi do zwisu
> interpretera).
>
> Z przyczyn niezależnych ode mnie nie mogę jednak zrezygnować z użycia
> procedury i przekazywania rekordów poprzez zmienna typu REF CURSOR. Czy
> ktoś może spotkał się z tym problemem? Może chociaż jakieś sugestie co
> jeszcze sprawdzić/czego się czepić bo przyznam ze pomysły powoli mi się
> konczą a rozwiązania nie widać. W googlu nie nic znalazłem na temat takich
> problemów, z tego co wyczytałem powinno działać to jak każde inne
> zapytanie.. Czy możliwe, że nie jest to wina DBI tylko np. wadliwego
> sterownika lub złej konfiguracji serwera/czegoś innego? Wszelkie sugestie
> mile widziane :)
Jak się okazało problemem była stara wersja DBD::Oracle - 1.21. Po
ręcznym skompilowaniu wersji 1.24 problem zniknął...
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads