2014-04-17 60 views
1

这里是我的代码:PLS-00201:标识符 'D.HOLIDAY_DATE' 必须声明为

DECLARE 
V_loop     number(2); -------declare the loop times 

begin 

looptimes(V_loop); ------set the forcast times from parameter table 
loop 
     IF V_loop > 0 ------forcast 
     THEN 
      IF to_char((sysdate+V_loop-7),'dd/mon/yy') not like To_chat((d.holiday_date),'dd/mon/yy')----------condition that perivous 'day' not holiday 
       then 
         insert into local_rm16(tni, lr, frmp, day, hh, volume) 
         SELECT TNI, LR, FRMP, sysdate+v_loop, HH, AVG(VOLUME) 
         FROM V_nem_rm16,DBP_holiday d 
         where to_char(day, 'Day') = to_char(sysdate+V_loop, 'Day') 
         group by day,hh, lr, frmp,tni 
         order by 1; 
       else 
         exit; 
       end if; 
         V_loop := V_loop -1; 
     ELSE 
      exit; 
     ENd if; 


END loop; 
end; 

我不知道HOWTO中,如果条件下,任何人都可以帮我申报HOLIDAY_DATE,THX

+0

欢迎来到SO!发布代码时请使用格式化工具 - 这会让您的问题更具可读性(我已经为您重新格式化了您的文章)。 –

+0

@FrankSchmitt thx为:) – user3544017

+0

对不起,弗兰克,我想了解为什么你会需要循环。如果我的方向不对,请原谅。你可以在where子句中使用那个IF子句条件,同时插入到local_rm16表中......类似于 - where to_char((sysdate + 5),'dd/mon/yy')不像To_chat((d.holiday_date),'dd/((d.holiday_date),'dd/mon/yy')或者to_char((sysdate + 6),'dd/mon/yy') – Veerender

回答

1
  1. 你已经写to_chat,而不是to_char

    IF to_char((sysdate+V_loop-7),'dd/mon/yy') not like To_chat((d.holiday_date),'dd/mon/yy')

  2. 在定义它之前,您不能使用d。它在SELECT中定义为DBP_holiday表的别名,但您在IF表达式中早些使用它。你应该再次考虑你的代码,因为你不能这样做(也许你应该考虑使用cursor loop)。

相关问题