[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