Plsql 通过PL/SQL填充日期维度表并确定日期类型

Plsql 通过PL/SQL填充日期维度表并确定日期类型,plsql,populate,dimension,star-schema,Plsql,Populate,Dimension,Star Schema,我有以下SQL表: CREATE TABLE SALES (saleID INT PRIMARY KEY, grossSalePrice DECIMAL(9,2), vehicleStatus VARCHAR(10) NOT NULL CHECK (lower(vehicleStatus) IN ('available', 'sold', 'pending')), saleDate DATE, saleMileage INT,

我有以下SQL表:

CREATE TABLE SALES
(saleID         INT     PRIMARY KEY,
grossSalePrice      DECIMAL(9,2),
vehicleStatus       VARCHAR(10) NOT NULL CHECK (lower(vehicleStatus) IN ('available', 'sold', 'pending')),
saleDate        DATE,
saleMileage     INT,
customerID      INT,
salespersonID       INT,
vehicleVIN      VARCHAR(25),
CONSTRAINT SALES_FK1 FOREIGN KEY (customerID) REFERENCES CUSTOMERS(customerID),
CONSTRAINT SALES_FK2 FOREIGN KEY (vehicleVIN) REFERENCES VEHICLES(vehicleVIN),
CONSTRAINT SALES_FK3 FOREIGN KEY (salespersonID) REFERENCES SALESPERSONS(salespersonID));
我创建了以下星形模式维度表:

CREATE TABLE TIMES
(saleDay        DATE        PRIMARY KEY,
dayType         VARCHAR(50) NOT NULL);
我需要用SALES表中的每个saleDate填充TIMES表的saleDay列。此外,dayType列应根据每个销售日填写。dayType列的值应为Weekday、Weekend或Holiday,如果dayType为Holiday,则应优于Weekday或Weekday

要符合假日的资格,日期必须是: 1月1日, 1月15日, 1月19日, 5月28日, 7月4日, 10月8日, 11月11日, 11月22日, 十二月二十五号


我被要求通过PL/SQL填充saleDay和dayType值,但我不知道从哪里开始,也不知道如何完成。非常感谢您对我如何完成此任务的任何帮助/指导

不需要使用PL/SQL

对于节假日,请使用以下各项:

select '01.01' hd from dual union all
select '15.01' from dual union all
select '19.01' from dual union all
select '28.05' from dual union all
select '04.07' from dual union all
select '08.10' from dual union all
select '11.11' from dual union all
select '22.11' from dual union all
select '25.12' from dual
要计算周末,请输入日期“d”。它返回一周中的若干天。但这里要小心,这取决于NLS设置。如果设置中的NLS_地区是美国,那么星期天是一周的第一天,例如,在一些其他地区的欧洲国家,它是第七天

因此,问题是:

insert into times (saleDay, dayType)
select saleDate, case when h.hd is not null then 'Holiday'
                      when to_char(saleDate, 'd') in (1,7) then 'Weekend' -- I suppose you are American
                      else 'Weekday' end dayType
   from sales s left join 
       (<holiday query above>) h
        on h.hd = to_char(s.saleDate, 'dd.mm')

如果您需要在PL/SQL中使用它,您可以在一个过程中执行查询。

Ugh-真是一件简单的事情!我只是很难把一个想法写在纸上并付诸实施。很好的例子,非常感谢!有没有具体的方法可以将其实现为PL/SQL?我在这里尝试过创建或替换过程:虽然它执行时没有错误,但似乎没有填充我的表。@StevenC据我所知,您执行了创建过程的脚本。但在这之后,您必须执行过程本身,比如开始插入时间;犯罪完;/。我执行了这个,现在填充了表:所以您的过程是正确的。