Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/10/2012, 11:38
gonzigonzi
 
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