Oracle APEX SQL 日期时间导入过程

我有一个包含日期和时间值的字段 (v_date),例如 (30-07-2021 13:30) 我想根据此字段将两个新的日期和时间值导入到我的表中。 第一个是7天后(08-06-2021 13:30),第二个是7天1小时后(08-06-2021 14:30)。

这是我的代码:

create or replace PROCEDURE "PR_ADD_MASSIVE_SESSIONS"
(v_date date)
IS
v_counter_day number :=7;
v_session_temp_date date;
v_session_temp_end date;


BEGIN

v_session_temp_date := to_date(v_date,'MM-DD-YYYY HH24:MI') + v_counter_day;
v_session_temp_end := to_date(v_date,'MM-DD-YYYY HH24:MI') + (v_counter_day + (1/1440*60));
        
INSERT INTO SESSIONS (CLIENTS_ID,SESSION_AREA,SESSION_DATE,SESSION_STOP,PAYMENT_TYPE_ID,PRICE,STATUS,COMPLETED,PAYMENT_STATUS,SESSION_NO)
VALUES (5,1,v_session_temp_date,v_session_temp_end,2,40,1);

END;

我收到此错误:Ajax 调用返回服务器错误 ora-01843:无效月份。 我尝试使用 to_char 但编译器只想要 to_date 才能获得成功的过程。

niuliang1023 回答:Oracle APEX SQL 日期时间导入过程

变量 v_session_temp_date 和 v_session_temp_date 定义为 DATE。函数 TO_DATEstring 转换为日期。它不应用于 DATE 类型的变量。删除 TO_DATE 就可以了。下面的示例代码(使用匿名块,而不是过程)

CREATE TABLE sessions
(
clients_id NUMBER,session_area NUMBER,session_date  DATE,session_stop  DATE,payment_type_id NUMBER,price NUMBER,status NUMBER,completed NUMBER,payment_status NUMBER,session_no NUMBER
);

Table SESSIONS created.

--original code
DECLARE
  v_date date := SYSDATE;
  v_counter_day number := 7;
  v_session_temp_date date;
  v_session_temp_end date;
BEGIN
  v_session_temp_date := to_date(v_date,'MM-DD-YYYY HH24:MI') + v_counter_day;
  v_session_temp_end := to_date(v_date,'MM-DD-YYYY HH24:MI') + (v_counter_day + (1/1440*60));
  
  INSERT INTO SESSIONS (CLIENTS_ID,SESSION_AREA,SESSION_DATE,SESSION_STOP,PAYMENT_TYPE_ID,PRICE,STATUS,COMPLETED,PAYMENT_STATUS,SESSION_NO)
  VALUES (5,1,v_session_temp_date,v_session_temp_end,2,40,1);
END;
/
ORA-01843: not a valid month
ORA-06512: at line 7
01843. 00000 -  "not a valid month"
*Cause:    
*Action:

--fixed code
DECLARE
  v_date date := SYSDATE;
  v_counter_day number := 7;
  v_session_temp_date date;
  v_session_temp_end date;
BEGIN
  v_session_temp_date := v_date + v_counter_day;
  v_session_temp_end := v_date + (v_counter_day + (1/1440*60));
  
  INSERT INTO SESSIONS (CLIENTS_ID,1);
END;
/
PL/SQL procedure successfully completed.
本文链接:https://www.f2er.com/11785.html

大家都在问