当前位置: 首页 > 知识库问答 >
问题:

在php oracle中更新日期时出错

裘臻
2023-03-14

我在向表单输入日期时遇到了一个问题,我查看了其他帖子,但他们给我的解决方案对我不起作用:(错误指示我一个无效的月份错误。

我尝试使用TO_DATE('...','dd/mm/yyyy'),但通过这样做引发了另一个错误(actualizaoferta.php):

begin ACTUALIZA_OFERTAS(:codigo, :monto, TO_DATE(:fechI,"DD/MM/YYYY"), TO_DATE(:fechL,"DD/MM/YYYY"), :retorno, :ok); end;');

我试了很多方法来输入日期,但什么都没有。

PARAMETER                      VALUE                                   
------------------------------ ----------------------------------------
NLS_LANGUAGE                   SPANISH                                 
NLS_TERRITORY                  SPAIN                                   
NLS_CURRENCY                   €                                       
NLS_ISO_CURRENCY               SPAIN                                   
NLS_NUMERIC_CHARACTERS         ,.                                      
NLS_CALENDAR                   GREGORIAN                               
NLS_DATE_FORMAT                DD/MM/RR                                
NLS_DATE_LANGUAGE              SPANISH                                 
NLS_SORT                       SPANISH                                 
NLS_TIME_FORMAT                HH24:MI:SSXFF                           
NLS_TIMESTAMP_FORMAT           DD/MM/RR HH24:MI:SSXFF                  

PARAMETER                      VALUE                                   
------------------------------ ----------------------------------------
NLS_TIME_TZ_FORMAT             HH24:MI:SSXFF TZR                       
NLS_TIMESTAMP_TZ_FORMAT        DD/MM/RR HH24:MI:SSXFF TZR              
NLS_DUAL_CURRENCY              €                                       
NLS_COMP                       BINARY                                  
NLS_LENGTH_SEMANTICS           BYTE                                    
NLS_NCHAR_CONV_EXCP            FALSE        
<div role="tabpanel" class="tab-pane fade" id="Ofertas">
                  <div class="row">
                    <div class="col-xs-12">
                        <br><br>
                        <div class="panel panel-info">
                            <div class="panel-heading text-center"><i class="fa fa-refresh fa-2x"></i><h3>Actualizar datos de ofertas</h3></div>
                          <div class="table-responsive">
                              <table class="table table-bordered">
                                  <thead class="">
                                      <tr>
                                          <th class="text-center">Código Producto</th>
                                          <th class="text-center">% Dcto</th>
                                          <th class="text-center">Fecha Inicio</th>
                                          <th class="text-center">Fecha Fin</th>
                                      </tr>
                                  </thead>
                                  <tbody>
                                      <?php
                                          include("conexion.php");

                                          $conn = oci_connect($username, $password, $db);
                                          if (!$conn) {
                                              $e = oci_error();
                                              trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
                                          }
                                          $up=1;
                                          $seleccion="select * from ofertas order by codigo_producto asc";
                                          // Se hace la conversión de la consulta con la conexión
                                          $variable = oci_parse($conn,$seleccion);                                  
                                          $estado=@oci_execute($variable);
                                          if(!$estado){
                                              $error = oci_error($variable);  
                                              echo $error['message'];
                                          }                         
                                          //La consulta retorna un arreglo de valores que se debe recorrer con oci_fetch
                                          //Cada valor entre los [] es una columna de la tabla en la base de datos

                                          $contador = 0;
                                          while (($elementop = oci_fetch_array($variable, OCI_BOTH)) != false) 
                                          {  
                                            echo '<div id="update-product">
                                                  <form method="post" action="process/actualizaOferta.php" id="res-update-ofert-'.$up.'">
                                                    <tr>
                                                        <td>
                                                          <input class="form-control" type="text" name="ofer-cod-act" maxlength="30" required="" value="'.$elementop['CODIGO_PRODUCTO'].'">
                                                        </td>
                                                        <td><input class="form-control" type="text" name="ofer-monto-act" maxlength="30" required="" value="'.$elementop['MONTO'].'"></td>
                                                        <td><input class="form-control" type="text-area" name="ofer-fecI-act" required="" value="'.$elementop['FECHA_INICIO'].'"></td>
                                                        <td><input class="form-control" type="tel" name="ofer-fecL-act" required="" maxlength="20" value="'.$elementop['FECHA_LIMITE'].'"></td>
                                                        <td class="text-center">
                                                            <button type="submit" class="btn btn-sm btn-primary button-UPR" value="res-update-ofert-'.$up.'">Actualizar</button>
                                                            <div id="res-update-ofert-'.$up.'" style="width: 100%; margin:0px; padding:0px;"></div>
                                                        </td>
                                                    </tr>
                                                  </form>
                                                </div>
                                                ';
                                                $up=$up+1;
                                                $contador++;
                                            }
                                            if($contador == 0){
                                              echo '<h3>No hay ofertas registradas.</h3>';
                                            } 

                                            oci_free_statement($variable);
                                            oci_close($conn); 
                                            ?>
                                  </tbody>
                              </table>
                          </div>
                        </div>
                    </div>

                  </div>
                </div>
<?php
    include("conexion.php");

    $conn = oci_connect($username, $password, $db);
    if (!$conn) {
        $e = oci_error();
        trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
    }


    $ingreso = oci_parse($conn, 'begin ACTUALIZA_OFERTAS(:codigo, :monto, :fechI, :fechL, :retorno, :ok); end;');

    //  oci_bind_by_name para pasar los valores rescatados por $_POST[] desde el formulario.
    oci_bind_by_name($ingreso, ':codigo', $_POST['ofer-cod-act']);
    oci_bind_by_name($ingreso, ':monto', $_POST['ofer-monto-act']);
    oci_bind_by_name($ingreso, ':fechI', $_POST['ofer-fecI-act']);
    oci_bind_by_name($ingreso, ':fechL', $_POST['ofer-fecL-act']);
    oci_bind_by_name($ingreso, ':retorno',$salida,100);
    oci_bind_by_name($ingreso, ':ok',$listo,100);


    //  Con oci_execute se ejecuta la sentencia y retorna falso en caso de error.
    $ok = oci_execute($ingreso);
    if (!$ok) {
        $error = oci_error($ingreso);   //  oci_error entrega el mensaje de error que proviene de oracle
        echo htmlentities($error['message']);   //  htmlentities da formato html al texto retornado   
    }

    if ($listo=='FALSE') 
    {
        echo 'valor es: '.$salida . 'y: ' . $listo;

    else
    {
        echo 'valor es: '.$salida . 'y: ' . $listo;

    }

    oci_free_statement($ingreso);   //  Liberación de memoria utilizada.    
    oci_close($conn);
?>

程序

CREATE OR REPLACE PROCEDURE ACTUALIZA_OFERTAS(
  cod_prod IN OFERTAS.codigo_producto%TYPE,
  mont IN OFERTAS.monto%TYPE, --objeto
  fec_in IN OFERTAS.fecha_inicio%TYPE, --objeto
  fec_lim IN OFERTAS.fecha_limite%TYPE,

  MENSAJE OUT VARCHAR2,
  VALOR OUT VARCHAR2
)
IS
  noExiste EXCEPTION;
BEGIN
    LOCK TABLE OFERTAS IN ROW EXCLUSIVE MODE;

    UPDATE OFERTAS 
    SET monto=mont,
        fecha_inicio=fec_in,
        fecha_limite=fec_lim
    WHERE codigo_producto=cod_prod;

    IF SQL%NOTFOUND THEN
      RAISE noExiste;
    END IF;

    COMMIT;

    MENSAJE:='OFERTA DEL PRODUCTO >' || cod_prod || '< ACTUALIZADO CORRECTAMENTE';
    VALOR:='TRUE';
EXCEPTION
  WHEN noExiste THEN
    MENSAJE:='NO SE HA ENCONTRADO EL PRODUCTO' || cod_prod;
    VALOR:= 'FALSE';
    ROLLBACK;
  WHEN PROGRAM_ERROR THEN
    MENSAJE:='DAÑO EN LA BASE DE DATOS O LIBRERIAS CORRUPTAS';
    VALOR:= 'FALSE';
    ROLLBACK;
  WHEN STORAGE_ERROR THEN
    MENSAJE:='LA MEMORIA SE TERMINÓ O ESTÁ CORRUPTA';
    VALOR:= 'FALSE';
    ROLLBACK;
  WHEN ROWTYPE_MISMATCH THEN 
    MENSAJE:='TIPO DE ASIGNACIÓN NO COINCIDE CON EL DE LA VARIABLE';
    VALOR:= 'FALSE';
    ROLLBACK;
  WHEN OTHERS THEN
    MENSAJE:='ERROR DESCONOCIDO EN EL PROCEDIMIENTO "ACTUALIZA_OFERTAS"';
    VALOR:= 'FALSE';
    ROLLBACK; 
END;
/

提前致谢:)

共有1个答案

羊越
2023-03-14

截图显示您输入的日期值为“20/04/95”(即dd/mm/yy),但在TO_DATE函数中使用了不同的日期格式掩码:dd/mm/yyyy。试着让他们一样。就我个人而言,我更喜欢4位数的年份。

另外,你不应该用双引号,而应该用单引号。

所以:

to_date(:fechI, 'dd/mm/yy')
 类似资料:
  • 问题内容: 经过大量的google’ing和PHP手动阅读之后,我真的很想在日期时间加上X分钟,但似乎一无所获。 我的日期时间格式是: : 要添加的分钟数只是0到59之间的数字 我希望输出与添加分钟的输入格式相同。 有人可以给我一个有效的代码示例,因为我的尝试似乎并没有带我去任何地方? 问题答案: 在ISO 8601标准的持续时间 是在形式的串,其中所述部件用指示的持续时间有多长一个数字值代替。

  • 问题内容: 当我想在mysql表中设置数值+1时,我使用例如: 如何设置日期+一年? 谢谢 问题答案: 您可以使用DATE_ADD:(或将ADDDATE与一起使用)

  • 我的程序使用日期来检查工程师何时访问过机器。唯一的问题是日期并不是最新的。机器显示的日期和时间是机器启动的准确时间。当按钮被点击时就不会了。任何帮助都会有帮助。 代码:

  • 问题内容: 如何使用MySQL在过去2周中使用随机日期更新列? 例如(代码实际上不起作用): 问题答案: 您可以使用以下表达式获得随机整数: 要获得i <= R <j范围内的随机整数R,请使用表达式 。例如,要获得7 <= R <12范围内的随机整数,可以使用以下语句: http://dev.mysql.com/doc/refman/5.1/en/mathematical- functions.h

  • 本文向大家介绍如何在MySQL中更新日期格式?,包括了如何在MySQL中更新日期格式?的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 以下是转换日期格式的查询- 这将产生以下输出-

  • 我有一个Calendarview和一个EditText。我希望以DD/MM/YYYY格式在edittext中输入的日期,并将其设置在CalendarView上。视图应将当前日期气泡更新为设置的日期。 提前道谢!