[Cascavel-pm] Modulo DBIx::ProcedureCall
Adriano Rodrigues
a.r.ferreira em gmail.com
Sábado Novembro 25 09:49:14 PST 2006
On 11/25/06, Juliano Dantas <juliano.dantas em gmail.com> wrote:
> Prezados monges,
>
> Algum de vocês já criaram algum codigo utilizando o modulo:
> DBIx::ProcedureCall?
> Eu preciso executar uma procedure Oracle via perl.
Juliano,
Você precisa mesmo do DBIx::ProcedureCall? Se a idéia é "executar uma
procedure Oracle via perl", pode ser feito apenas com DBI e
DBD::Oracle. Coisa assim:
# código que não foi testado à frente
use strict;
use warnings;
use DBI qw(:sql_types);
my $dbh = DBI->connect("dbi:Oracle:SID.WORLD",
"user", "pass",
\%other_options);
# ao menos { RaiseError => 1 } é recomendado
my $sql = <<SQL;
-- isto é código em PL/SQL
begin
-- invoque minha procedure Oracle
owner.my_procedure(:in_a, :in_b, :out_c);
end;
SQL
my $stmt = $dbh->prepare($sql);
my ($var_a, $var_b, $var_c);
$stmt->bin_param('in_a', \$var_a, SQL_INTEGER);
$stmt->bin_param('in_b', \$var_a, SQL_INTEGER);
$stmt->bind_param_inout('out_c', \$var_c, 0, SQL_INTEGER);
$var_a = 42; # valor do primeiro parâmetro de entrada
$var_b = 666; # valor do segundo parâmetro de entrada
$stmt->execute;
print "out_c is $var_c\n"; # valor do parâmetro de saída depois da chamada
É claro que DBIx::ProcedureCall parece ser uma elegante abstração
sobre a chamada de procedures (com a qual não tenho experiência). Eu
diria que se a questão é chamar uma ou duas procedures com meia dúzia
de parâmetros, vá com DBI e DBD::Oracle. Mas se o problema é mais
exigente, o DBIx::ProcedureCall deve facilitar bem as coisas.
Boa sorte.
Mais detalhes sobre a lista de discussão Cascavel-pm