簡體   English   中英

Oracle APEX SQL 日期時間導入過程

[英]Oracle APEX SQL Date Time Import Procedure

我有一個包含日期和時間值的字段 (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, 1, 1, 1);

END;

我收到此錯誤:Ajax 調用返回服務器錯誤 ORA-01843:無效月份。 我嘗試使用 to_char 但編譯器只想要 to_date 才能有一個成功的過程。

變量 v_session_temp_date 和 v_session_temp_date 被定義為DATE TO_DATE函數將字符串轉換為日期。 它不應用於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, 1, 1, 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, 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, 1, 1, 1);
END;
/
PL/SQL procedure successfully completed.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM