我是 Oracle PL/SQL 的新手,我正在嘗試創建一個名為 pop_date_dim 的程序,它填充一個名為 date_dim 的現有日期維度。它通過接受日期 (DDMMYYYY) 和數字 (n) 作為引數來實作。然后使用 FOR 回圈填充日期維度。不幸的是,我不斷收到兩個錯誤。錯誤 (142,9): PL/SQL: SQL 陳述句忽略和錯誤 (152,13)??: PL/SQL: ORA-00904: "QUARTER": 無效識別符號。
這是代碼:
CREATE OR REPLACE PROCEDURE pop_date_dim (DDMMYYYY IN number, n IN number)
IS
start_date date;
BEGIN
start_date := TO_DATE(DDMMYYYY, 'DDMMYYYY');
FOR i IN 1..n LOOP
INSERT INTO date_dim
VALUES (
start_date i,
dayofweek(start_date i),
dayofmonth(start_date i),
dayofyear(start_date i),
dayname(start_date i),
month(start_date i),
monthname(start_date i) i,
year(start_date i),
quarter(start_date i)
);
END LOOP;
END;
它似乎與 Oracle 的 quad() 函式有關,該函式應該回傳 1 到 4 范圍內的整數。我根本看不出問題出在哪里。任何建議或指示?
uj5u.com熱心網友回復:
使用的函式都不是內置在 Oracle 函式中的,它們可能是用戶定義的,但 Oracle 確實提供to_char(some_date,'fmt')了 fmt 代碼可以提供您需要的每個值的地方,包括quarter. 請參閱to_char。此外,無需遍歷日期。您可以在單個陳述句中執行此操作,也可以將其構建為一個程序。
create or replace procedure pop_date_dim(
start_date in date
, number_of_days in number
)
is
begin
insert into date_dim(
<list of columns>
)
with date_list (each_date) as
( select start_date (level-1)
from dual connect by level <= number_of_days
)
select <list of values>
from date_list;
end pop_date_dim;
見演示。演示只做了一些欄位,應該足以顯示程序。
uj5u.com熱心網友回復:
所有這些函式,大概來自 MySQL DB,在 VALUES 串列中都不存在于 Oracle DB 中,應該被翻譯。
確實不需要用這些轉換后的值填充表的列,因為您可以通過TO_CHAR()對 SELECT 陳述句中的每個值使用合適的轉換來獲取它們,但是對于您的情況,該程序可能會被重寫為考慮 Oracle DB
CREATE OR REPLACE PROCEDURE pop_date_dim(DDMMYYYY IN VARCHAR2, n IN INT) IS
start_date DATE;
BEGIN
start_date := TO_DATE(DDMMYYYY, 'DDMMYYYY');
FOR i IN 1 .. n LOOP
INSERT INTO date_dim
VALUES
(start_date i,
TO_CHAR(start_date i, 'D', 'NLS_DATE_LANGUAGE=English'),
TO_CHAR(start_date i, 'DD'),
TO_CHAR(start_date i, 'DDD'),
TO_CHAR(start_date i, 'Day', 'NLS_DATE_LANGUAGE=English'),
TO_CHAR(start_date i, 'MM'),
TO_CHAR(start_date i, 'Month', 'NLS_DATE_LANGUAGE=English'),
TO_CHAR(start_date i, 'YYYY'),
TO_CHAR(start_date i, 'Q'));
END LOOP;
END;
/
對于具有前導零的值的情況,您應該將第一個引數設為字串型別而不是數字型別
Demo
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/321326.html
上一篇:在openSUSELEAP15.3上安裝Oracle資料庫軟體19c
下一篇:從物化視圖獲取列型別
