我使用这个脚本在oracle 11g express上的datawarehouse上生成时间表。这是桌子

但是,当我编译时,它会给出以下错误:

。
下面的脚本将生成时间维度。我记得一年前使用了相同的代码,但现在它给了我我提到的错误:
CREATE or replace procedure date_manag is
date_debut DATE;
date_loop DATE;
date_fin DATE;
jour BINARY_INTEGER;
mois BINARY_INTEGER;
annee BINARY_INTEGER;
trim BINARY_INTEGER;
nom Varchar2(20);
Begin
date_debut:=TO_DATE('20/01/2012','dd/mm/yyyy');
date_fin:=TO_DATE('20/12/2012','dd/mm/yyyy');
date_loop:=date_debut;
WHILE date_loop <=date_fin
LOOP
select extract(day from date_loop) into jour from dual;
select extract(month from date_loop) into mois from dual;
select extract(year from date_loop) into annee from dual;
CASE
WHEN mois=1 THEN nom :='JANVIER';
WHEN mois=2 THEN nom :='FEVRIER';
WHEN mois=3 THEN nom :='MARS';
WHEN mois=4 THEN nom :='AVRIL';
WHEN mois=5 THEN nom :='MAI';
WHEN mois=6 THEN nom :='JUIN';
WHEN mois=7 THEN nom :='JUILLET';
WHEN mois=8 THEN nom :='AOUT';
WHEN mois=9 THEN nom :='SEPTEMBRE';
WHEN mois=10 THEN nom :='OCTOBRE';
WHEN mois=11 THEN nom :='NOVEMBRE';
else nom:='DECEMBRE';
END CASE;
CASE
when mois in(1,2,3) THEN trim :=1;
when mois in(4,5,6) THEN trim :=2;
when mois in(7,8,9) THEN trim :=3;
else trim:=4;
END CASE;
INSERT into QOS.TEMPS VALUES( CASE
when mois in(10,11,12) THEN annee||jour||mois
ELSE annee||jour||'0'||mois
END
,annee,mois,jour,trim,jour || '/' || mois || '/' || annee,nom);
select ADD_MONTHS(date_loop,1) into date_loop from dual;
END LOOP;
END;
/
[this is my table][2]谢谢
发布于 2016-06-14 21:15:54
INSERT语句中的值与表中的列的顺序不同。最好不要依赖列的顺序,应该显式地列出列。
INSERT into QOS.TEMPS (ID_DATE, ANNEE, MOIS, JOUR, TRIMESTRE, DATETIME, NOM)
VALUES( CASE
WHEN mois > 9 THEN annee||jour||mois
ELSE annee||jour||'0'||mois
END
,annee,mois,jour,trim,jour || '/' || mois || '/' || annee,nom);发布于 2016-06-14 21:19:35
您的SQL
select extract(year from date_loop) into annee from dual;返回年份的整数值,该列期待日期。
https://stackoverflow.com/questions/37819980
复制相似问题