Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Llamada a procedimiento almacenado Oracle

Estas en el tema de Llamada a procedimiento almacenado Oracle en el foro de Oracle en Foros del Web. Hola buenos días a todos: Estoy intentado hacer una prueba sencilla con PHP (oci8, adodb y un procedimiento almacenado de oracle) y no consigo que ...
  #1 (permalink)  
Antiguo 19/12/2008, 07:25
 
Fecha de Ingreso: noviembre-2008
Mensajes: 10
Antigüedad: 16 años
Puntos: 0
Llamada a procedimiento almacenado Oracle

Hola buenos días a todos:

Estoy intentado hacer una prueba sencilla con PHP (oci8, adodb y un procedimiento almacenado de oracle) y no consigo que se ejecute correctamente. Os explico con más detalle:

El código PHP es el siguiente:

************************************************** *******************

<?php
//Crear Conexión:
//Incluir la clase que hace permite conexión a Oracle
include "adodb/adodb.inc.php";

$DB = ADONewConnection('oci8');
$DB->connectSID = true;

//Datos de conexion
$ip_servidor ="10.165.4.22"; //Sí Php y Oracle están en la misma máquina
//en caso contrario incluir la ip del servidor oracle
$user ="rlab";
$password ="rlab";
$sid ="sscc";


//Conexion
$conexion=$DB->Connect($ip_servidor, $user, $password, $sid);
echo "conexion--->$conexion";
//Sí se establece la conexión el resultado es 1

$stmt = $DB->PrepareSP("begin sp_ejemplo(:param_id); end;");
$DB->OutParameter($stmt,$rs,'param_id');
$DB->Execute($stmt);

if ($rs)
while ($arr = $rs->FetchRow()) {
echo $arr;
}
else
{
echo "El procedimiento almacenado no devuelve nada";
}
?>
************************************************** **************

El código del procedimiento almacenado es el siguiente:
create or replace
PROCEDURE sp_ejemplo( param_id out numeric ) AS
BEGIN
SELECT id INTO param_id FROM profesionales;
END sp_ejemplo;


************************************************** *********

Como podreis comprobar, es un ejemplo muy sencillo, el procedure es una simple select. Yo quiero coger el resultado de la select desde el código de PHP utilizando adodb, pero no me muestra nada, ni me da error ni nada de nada.

¿Pensais que tengo algo mal en el código PHP? ¿Pensais que me puede faltar algo en el procedimiento almacenado para indicarle que mande el resultado de líneas correspondientes?

Muchas gracias y un cordial saludo
  #2 (permalink)  
Antiguo 19/12/2008, 10:47
Avatar de Drako_18  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 505
Antigüedad: 19 años, 6 meses
Puntos: 16
Respuesta: Llamada a procedimiento almacenado Oracle

PRUEBA HACIENDO UNA SELECT CON EL PROCEDIMIENTO...

SELECT sp_ejemplo(:param_id)
FROM DUAL;

POR EJEMPLO.
__________________
Rubén Espada
Desarrollador full stack .Net (Angular + JS + .Net Core)
  #3 (permalink)  
Antiguo 19/12/2008, 19:52
Avatar de kikolice  
Fecha de Ingreso: marzo-2004
Mensajes: 1.510
Antigüedad: 20 años, 8 meses
Puntos: 7
Respuesta: Llamada a procedimiento almacenado Oracle

no me creas mucho, no tengo oracle a la mano, pero si no mal recuerdo no puedes asignar directamente el valor de un select a una variable out en un store
__________________
Blogzote.com :-) Mi blog
  #4 (permalink)  
Antiguo 20/12/2008, 05:35
Avatar de Drako_18  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 505
Antigüedad: 19 años, 6 meses
Puntos: 16
Respuesta: Llamada a procedimiento almacenado Oracle

Ciertamente alomejor casca, pero si envez de un procedure con un parametro out, utiliza una funcion con un return, seguro al 100% que si se podra utilizar.

el codigo sería algo así....

create or replace FUNCTION sp_ejemplo( PNU_CONDICION numeric ) return NUMBER
AS
VNU_RESULT NUMBER(100);
BEGIN
SELECT id
INTO VNU_RESULT
FROM profesionales
WHERE ......;

RETURN(VNU_RESULT);
END sp_ejemplo;


PD: si no pones la condicion te saltara un error too_many_rows DEMASIADAS FILAS tendría que ser una tabla, no una variable normal... alomejor es eso lo que te esta pasando ahora con el procedure.....



Saludos!!!
__________________
Rubén Espada
Desarrollador full stack .Net (Angular + JS + .Net Core)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:13.