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