Olá pessoal,
Estou com o seguinte problema:
Preciso executar uma stored procedure no Oracle com passagem de 1 argumento e o retorno serão vários argumentos.
Está instalado no servidor o instantclient 10 (O bd é o Oracle 10g), Apache2, PHP5, PDO com oci.
Quando executava em Java, era a seguinte linha que comunicava:
// O primeiro argumento é o ID do funcionário e os demais argumentos são os retornos dos dados
CallableStatement cs = con.prepareCall("{call PROC_EXP_DADOS(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}");
Fiz o seguinte código em PHP que conectou corretamente:
//Nome de usuário do banco de dados.
$ora_user = "USUARIO";
//Senha do usuário no banco de dados.
$ora_senha = "SENHA";
//Definições do banco de dados.
$BD = "(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = IP1-DO-SERVIDOR)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = P1-DO-SERVIDOR)(PORT = 1521))
(LOAD_BALANCE = yes)
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = BD)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
)
)
)";
// Conexão ao bd
if ($ora_conexao = OCILogon($ora_user,$ora_senha,$BD) ){
echo "Conexão bem sucedida. Usuário conectado: $ora_user";
}
else{
echo "Erro na conexão com o Oracle.";
}
Mas não estou conseguindo trazer os dados do banco de dados.
Tentei o seguinte código para, após a conexão, trazer os dados dos funcionários:
// id do funcionário
$var1 = "30402";
$sql = "BEGIN PROC_EXP_DADOS($var1, :bind2, :bind3, :bind4, :bind5, :bind6, :bind7, :bind8, :bind9, :bind10, :bind11, :bind12, :bind13, :bind14, :bind15, :bind16, :bind17, :bind18, :bind19, :bind20, :bind21, :bind22, :bind23, :bind24, :bind25); END; ";
//INTERPRETA
$sql = OCIParse($VEGA,$sql);
//EXECUTA
OCIExecute($sql, OCI_DEFAULT);
//LOGOFF
OCILogoff($VEGA);
Mas obtive o seguinte erro:
Conexão bem sucedida. Usuário conectado: USUARIO
Warning: ociparse() expects parameter 1 to be resource, string given in C:\www\integraweb\index2.php on line 51
Warning: ociexecute() expects parameter 1 to be resource, null given in C:\www\integraweb\index2.php on line 54
Warning: ocilogoff() expects parameter 1 to be resource, string given in C:\www\integraweb\index2.php on line 58
Alguém poderia me sugerir como devo montar a comunicação com essa procedure pelo PHP?
Estou com interesse pois tenho pretensão de migrar o sistema de Java para PHP, porém essa procedure é um ponto crítico.
Quem puder colaborar, fico grato.
Abraços,
Eduardo