[Cascavel-pm] Compartilhar conexão DBD::Oracle entre processos (usando XML::Twig)

Joenio Costa joenio em gmail.com
Quinta Abril 5 14:28:29 PDT 2007


Olá Pessoal,

Preciso analisar um XML e gravar os seus dados num banco Oracle, estou
utilizando XML::Twig com parametro twig_handlers para fazer o parser
do XML. O XML tem aproximadamente 35 MB e isto iria consumir muita
memória caso eu não utilize o parametro twig_handlers. Não encontrei
na documentação do XML::Twig mas notei que ao utilizar esse parametro
é criado um processo filho, e é isto que esta causando problemas com
minha conexão com o Oracle.

Eu obtenho o seguinte erro ao executar algo parecido com o exemplo abaixo:
DBD::Oracle::db disconnect failed: ORA-03113: end-of-file on
communication channel (DBD ERROR: OCISessionEnd)

--------

use DBI;
use XML::Twig;

my $dbh = DBI->connect('dbi:Oracle:database', 'user', 'pass');
my $sth = $dbh->prepare("
	INSERT INTO table (col1, col2, col3)
	VALUES (123, ?, ?)
");
my $twig = XML::Twig->new(
   twig_handlers => { PIT => sub {
      my ($t, $product) = @_;
      my $descricao = $product->first_child('pitName')->att('name');
      my $preco = $product->first_child('pitPrice')->att('price');
      $sth->bind_param(1, $descricao);
      $sth->bind_param(2, $preco);
      $sth->execute();
      $sth->finish();
      $t->purge;
   }}
);
$twig->parseurl('file:///home/joenio/data/produtos.xml');
$twig->purge;
$dbh->disconnect();

-----

Alguem já enfrentou situação parecida?

Obrigado,
-- 
Joenio Costa
- Salvador Perl Mongers - Grupo de Usuário Perl de Salvador
- Colibre - Cooperativa de Tecnologias Livres
- PSL-BA - Projeto Software Livre Bahia


Mais detalhes sobre a lista de discussão Cascavel-pm