Foros del Web » Programando para Internet » PHP »

pasar variable por referencia a procedimiento de oracle?

Estas en el tema de pasar variable por referencia a procedimiento de oracle? en el foro de PHP en Foros del Web. Hola a todos, tengo la siguiente duda... Estoy trabajando con php 4, oracle 10g y apache en un servidor windows. Tengo un procedimiento en oracle ...
  #1 (permalink)  
Antiguo 22/10/2008, 15:56
 
Fecha de Ingreso: julio-2001
Ubicación: León, Gto.
Mensajes: 119
Antigüedad: 22 años, 9 meses
Puntos: 2
pasar variable por referencia a procedimiento de oracle?

Hola a todos, tengo la siguiente duda...

Estoy trabajando con php 4, oracle 10g y apache en un servidor windows. Tengo un procedimiento en oracle el cual debo ejcutar desde php, para eso no hay problema porque utilizo algo como lo siguiente y funciona bien para otros casos similares

$query_sql = "BEGIN MI_PROCEDIMIENTO($var1,$var2,$var3); END;";
$resultado = query_bd_ora($query_sql);
ocicommit($conexionOra);

mi problema es el siguiente: la variable2 tiene que pasarse como referencia y no por valor puesto que asi esta definido el procedimiento desde oracle. Intente pasarle la variable de esta forma &$var2 pero no funciono.

¿Alguien sabe como tendria que armar la llamada al procedimiento en el php para que se ejecute el procedimiento correctamente?
__________________
. . : : chunga : : . .
  #2 (permalink)  
Antiguo 22/10/2008, 16:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: pasar variable por referencia a procedimiento de oracle?

Hola mflores12,

Tienes que usar oci_bind_by_name para pasar la variable por referencia.

Saludos.
  #3 (permalink)  
Antiguo 22/10/2008, 17:11
 
Fecha de Ingreso: julio-2001
Ubicación: León, Gto.
Mensajes: 119
Antigüedad: 22 años, 9 meses
Puntos: 2
Respuesta: pasar variable por referencia a procedimiento de oracle?

hice los siguientes cambios al codigo:

$query_sql = "BEGIN MI_PROCEDIMIENTO($var1,:var2,$var3); END;";
ocibindbyname($query_sql,":var2",$var2,strlen($var 2));
$resultado = query_bd_ora($query_sql);
ocicommit($conexionOra);

y me marco el siguiente error:
Warning: ocibindbyname(): supplied argument is not a valid OCI8-Statement resource in c:\servidor\web\...
Error: 1008 ORA-01008: no todas las variables han sido enlazadas

el mensaje dice que los argumentos no son validos, pero no se exactamente a que se refiera eso... el tipo del campo de la tabla es entero
__________________
. . : : chunga : : . .
  #4 (permalink)  
Antiguo 22/10/2008, 18:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: pasar variable por referencia a procedimiento de oracle?

Para poder usar la función de oci_bind_by_name necesitas usar prepared statements, y le estas pasando un string directo, revisa la documentación para que veas como usar los prepared statements.

Saludos.
  #5 (permalink)  
Antiguo 23/10/2008, 12:56
 
Fecha de Ingreso: julio-2001
Ubicación: León, Gto.
Mensajes: 119
Antigüedad: 22 años, 9 meses
Puntos: 2
Respuesta: pasar variable por referencia a procedimiento de oracle?

Hola de nuevo, pues ya lo pude resolver aqui les dejo el codigo que use por si alguien esta en la misma situacion

// mandamos llamar el proceso que interactua con la base de datos
$query_sql = "BEGIN MI_PROCEDIMIENTO($var1,:var2,$var3); END;";
// analiza la consulta
$result_query = ociparse($conexionOra, $query_sql);
// enlaza una variable PHP a un Placeholder de Oracle. La definición DEBE hacerse ANTES del ociexecute y despues del ociparse
ocibindbyname($result_query,":var2",$var2,strlen($ var 2));
// ejecuta la sentencia previamente analizada
$executa = ociexecute($result_query,OCI_DEFAULT);
ocicommit($conexionOra);


para mayor informacion visiten:
http://www.php.net/manual/es/function.ocibindbyname.php
http://www.oracle-base.com/articles/...gForOracle.php
http://webandbeer.com.ar/2008/06/ora...-bindings.html
__________________
. . : : chunga : : . .
  #6 (permalink)  
Antiguo 21/11/2017, 20:32
 
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 127
Antigüedad: 16 años, 3 meses
Puntos: 0
Busqueda Respuesta: pasar variable por referencia a procedimiento de oracle?

Hola tengo el mismo problema pero no he podido solucionarlo. Espero su apoyo

Código PHP:


if (isset($_POST["btn_conf"]) AND  ($_POST["btn_conf"]== "Confirmar"))
{
      
$nombre$_POST["name"];
      
$apellido$_POST["surname"];
      
$edad$_POST["age"];


 
$sql2 "BEGIN 
                  SEG_INSERTAR(
                  :P_NOMBRE,
                  :P_APELLIDO,
                  :P_EDAD);
            END;
            "
;

 
$stmt2 oci_parse($conn,$sql2);



oci_bind_by_name($stmt2,':P_NOMBRE',$nombre,40);
oci_bind_by_name($stmt2,':P_APELLIDO',$apellido,40);
oci_bind_by_name($stmt2,':P_EDAD',$edad,40);



oci_execute($stmt2OCI_DEFAULT);  




Espero tu apoyo
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:05.