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:
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.<?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; ?>
A continuación les muestro el Código de la pantalla:
Código:
Este formulario llama al programa envia_proceso.php y este es el codigo:<?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>
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:
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.<?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 } ?>
El código modificado es el siguiente:
Código:
En este programa se presente el siguiente error:<?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; ?>
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