Foros del Web » Programando para Internet » PHP »

Ejecutar desde Php Un Procedimiento Almacenado de Oracle

Estas en el tema de Ejecutar desde Php Un Procedimiento Almacenado de Oracle en el foro de PHP en Foros del Web. Hola me llamo Gonzalo y soy nuevo en el Foro y necesito ayuda para resolver un problema que tengo en PHP. He realizado un sencillo ...
  #1 (permalink)  
Antiguo 05/10/2012, 11:38
 
Fecha de Ingreso: octubre-2012
Mensajes: 1
Antigüedad: 11 años, 6 meses
Puntos: 0
Ejecutar desde Php Un Procedimiento Almacenado de Oracle

Hola me llamo Gonzalo y soy nuevo en el Foro y necesito ayuda para resolver un problema que tengo en PHP.

He realizado un sencillo programa en PHP el cual se conecta a Oracle y luego ejecuta un procedimiento de Oracle. Los parmametros de Entrada que recibe el Procedimiento son asignado a 2 variables al inicio del programa.

El codigo Php es el siguiente:

Código:
<?php

include 'fun_gzr.php';

date_default_timezone_set('America/Caracas');
set_time_limit(0); 
$HoraIni = (date("H:i:s"));
$connect = odbc_connect("Base_Mregsd", "MREG", "mregsd");
ini_set ( 'odbc.defaultlrl' , '65536' );

$a = '201210';
$b = '20121004;

$declaracion = odbc_prepare($connect, 'CALL ACTUALIZA_LOG_TRAFICO_V4(?,?)');
$exito = odbc_execute($declaracion, array($a,$b));
$HoraFin = date("H:i:s");

echo "La actualización terminó con exito con los siguientes parametros: ".$a." y ".$b." en " .  RestarHoras ($HoraIni,$HoraFin);

echo " Seg. ".$HoraIni." - ".$HoraFin;


?>
Cuando ejecuto este programa NO TENGO NINGUN PROBLEMA, sin embargo cuando realice una pantalla para ingresar los valores de $a y $b muestra un error que describiré más adelante, donde aparentemente el valor de $b se pierde en la linea donde llamamos ejecutamos el procedimeinto de Oracle que es donde esta la instrucción odbc_execute.

A continuación les muestro el Código de la pantalla:

Código:
<?php

   # Llamamos a la Libreria de Conexión
    include('c:\Xampp\xampplite\htdocs\Whs_Fac\facturas\Conexion_Odbc.php');

	# Ejecutamos la consulta para obtener el codigo de Operador con el parametro describe_oper que esta asignado a $id
	$result = consulta("select substr(fecha, 1, 6)
						  from cub_fecha
						 where fecha >= '20120101'
						group by substr(fecha, 1, 6)
						order by substr(fecha, 1, 6) DESC");

?>

<div id="formulario">

<form id="formulario" name="formulario" method="post" action="envia_proceso.php">
<table width="497" height="155" border="0" align="center" cellpadding="0" cellspacing="2">
  <tr>
    <th colspan="2" class="titulo">Actualización Historicos</th>
  </tr>
  <tr>
    <th width=30% height=8% class="label">Procedimiento</th>
    <td>
        <select name="selpro" size = '1' id="selpro" class="lista">
            <option>Actualización Log de Tráfico</option>
            <option>Actualización Log de Interconexión</option>
          </select>
    </td>
  </tr>
  <tr>
    <th width=30% height=8% class="label">Periodo</th>
    <td>
    	<select name="selper" size= '1' id="selper" class="lista">
			<?php while (odbc_fetch_row($result)) { ?>
			<option value=<?php echo $selper = odbc_result($result, 1); ?></option>
            <?php echo $selper; ?>
			<?php
				}
			?>  
        </select>
	</td>
  </tr>
  <tr>
    <th width=30% height=8% class="label">Fecha</th>
        <td><input name="fe_cha" type="text" class="lista" id="fe_cha" size="8" width="100"></td>
  </tr>
  <tr>
    <th colspan="2"><input name="Ejecutar" type="submit" id="submit" align="middle" border size="2" value="Ejecutar" class="boton"></th>
  </tr>
</table>
</form>
</div>
Este formulario llama al programa envia_proceso.php y este es el codigo:
y recibe la información del formularo y lo asigna a las variables $proceso, $per_iodo y $fechita... los echo que estan comentados los puse para verificar que se esta recibiendo la información del formulario.

Código:
<?php

	    $proceso  = $_REQUEST['selpro'];
	    $per_iodo = $_REQUEST['selper'];
	    $fechita  = $_REQUEST['fe_cha'];

/*		echo "Fecha:   ", $fechita;
		echo "<br>";		
  		echo "Proceso: ", $proceso;
		echo "<br>";
		echo "Periodo: ", $per_iodo;*/

		if ($proceso == "Actualización Log de Tráfico") { ?>
     	  	<?php echo "Proceso: ", $proceso;
				  echo "<br>";
				  echo "Periodo: ", $per_iodo;
				  echo "<br><br>";
				  echo "Fecha: ", $fechita; ?>
			<form action="Actualiza_Log_Trafico.php" method="post">
                    <input type="hidden" name="per_iodo" value="<?php echo $per_iodo; ?>" />
                    <input type="hidden" name="fechita" value="<?php echo $fechita; ?>" />
                    <input name="Aceptar" type="submit" id="submit" align="middle" value="Aceptar"/>
            </form>
        <?php }
        else { ?>
     	  	<?php echo "Proceso: ", $proceso;
				  echo "<br>";
				  echo "Periodo: ", $per_iodo;
				  echo "<br><br>";
				  echo "Fecha: ", $fechita; ?>
			<form action="Actualiza_Log_Interconexion.php" method="post">
                    <input type="hidden" name="per_iodo" value="<?php echo $per_iodo; ?>" />
                    <input type="hidden" name="fechita" value="<?php echo $fechita; ?>" />
                    <input name="Aceptar" type="submit" id="submit" align="middle" value="Aceptar"/>
			</form>
        <?php } ?>
      	 
Este procedimiento llamara al programa que inicialmente lo mostré con la diferencia de que a las variables $a y $b, reciben sus valores del anterior programa.

El código modificado es el siguiente:

Código:
<?php

include 'fun_gzr.php';
# include '../librerias/Conexion_Odbc.php';

date_default_timezone_set('America/Caracas');
set_time_limit(0); 
$HoraIni = (date("H:i:s"));
$connect = odbc_connect("Base_Mregsd", "MREG", "mregsd");

$a = $_REQUEST["per_iodo"];
$b = $_REQUEST["fechita"];

echo "Periodo y Fecha: ".$a." ".$b;

$declaracion = odbc_prepare($connect, 'CALL ACTUALIZA_LOG_TRAFICO_V4(?,?)');
$exito = odbc_execute($declaracion, array($a,$b));
$HoraFin = date("H:i:s");

echo "La actualización terminó con exito con los siguientes parametros: ".$a." y ".$b." en " .  RestarHoras ($HoraIni,$HoraFin);

echo " Seg. ".$HoraIni." - ".$HoraFin;

?>
En este programa se presente el siguiente error:

Warning: odbc_execute() [function.odbc-execute]: SQL error: [Oracle][ODBC][Ora]ORA-06502: PL/SQL: numeric or value error: character string buffer too small ORA-06512: at "MREG.ACTUALIZA_LOG_TRAFICO_V4", line 79 , SQL state S1000 in SQLExecute in C:\Xampp\xampplite\htdocs\Whs_Fac\Procesos_Mreg\Ac tualiza_Log_Trafico.php on line 24

Ojo que los parametros recibidos por el Procedimiento de Oracle son de tipo varchar2.

Por favor necesito ayuda para resolver este problema.

Saludos cordiales,

Gonzalo

Etiquetas: formulario, oracle, procedimiento, sql, almacenar, variables
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 22:37.