terça-feira, 10 de outubro de 2017

PHP - Como chamar SQL procedures em packages usando ODBC

Neste exemplo informamos como chamar uma procedure que pertence a uma package do tibero na linguagem PHP usando o driver ODBC.
O código abaixo é um exemplo de como realizar esta tarefa.

Para saber como configurar uma conexão ODBC do Tibero no Windows clique Aqui.

Exemplo:

<?php
  /*
  How to run:
    C:\php> php tibero.package.php
  
  SQL support:
    create table luiz.tb_phptst (text varchar(50));
  
    create or replace package luiz.pkg_test
    is
      procedure pr_test_no_argument2;
      procedure pr_test_with_arguments2(p1 varchar2, p2 varchar2, p3 varchar2);
    end;
  
    create or replace package body luiz.pkg_test
    is
      procedure luiz.pr_test_no_argument2
      is
        tm  timestamp;
      begin
        SELECT SYSTIMESTAMP into tm FROM DUAL;
        insert into luiz.tb_phptst values ('TEST OK - ' || tm);
      end;
      procedure luiz.pr_test_with_arguments2(p1 varchar2, p2 varchar2, p3 varchar2)
      is
        tm  timestamp;
      begin
        SELECT SYSTIMESTAMP into tm FROM DUAL;
        insert into luiz.tb_phptst values (p1 || p2 || p3 || tm);
      end;
    begin
      null;
    end;
  */
  
  $dsn    = "TIBERO6_32";
  $user   = "LUIZ";
  $passwd = "luiz";
  
  $check_date = date("U");
  
  if ($conn = odbc_connect("$dsn", "$user", "$passwd"))
  {
    // NOTE: Always use "CALL", "EXEC" does not work.
    $sql = "CALL luiz.pkg_test.pr_test_no_argument2;";
    $stmt   = odbc_prepare($conn, $sql);
    $result = odbc_execute($stmt);
    
    $arg1 = "It ";
    $arg2 = "works ";
    $arg3 = "fine ! - ";
    
    // NOTE: Always use "CALL", "EXEC" does not work.
    $sql = "CALL luiz.pkg_test.pr_test_with_arguments2(?,?,?);";
    $stmt   = odbc_prepare($conn, $sql);
    $result = odbc_execute($stmt, array($arg1, $arg2, $arg3));
    odbc_close($conn);
  }
  else
  {
    echo "Can not connect to DSN: $dsn";
    echo odbc_errormsg();
    exit(1);
  }
  
  $check_date2 = date("U");
  $total_time = $check_date2 - $check_date;
  echo "Elapsed time : $total_time\n";
?>

Nenhum comentário:

Postar um comentário