🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#51775
Author: menth0l
Date: Mon, 08 Feb 2010 18:02
45 lines
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
#51776
Author: menth0l
Date: Fri, 26 Feb 2010 07:19
43 lines
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