首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PL/SQL脚本datamart时刻表错误

PL/SQL脚本datamart时刻表错误
EN

Stack Overflow用户
提问于 2016-06-14 18:54:11
回答 2查看 83关注 0票数 0

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

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

下面的脚本将生成时间维度。我记得一年前使用了相同的代码,但现在它给了我我提到的错误:

代码语言:javascript
复制
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]

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-14 21:15:54

INSERT语句中的值与表中的列的顺序不同。最好不要依赖列的顺序,应该显式地列出列。

代码语言:javascript
复制
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);
票数 0
EN

Stack Overflow用户

发布于 2016-06-14 21:19:35

您的SQL

代码语言:javascript
复制
select extract(year from date_loop) into annee from dual;

返回年份的整数值,该列期待日期。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37819980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档