• 转 ORACLE 的FOR循环、游标、时间值函数、转换函数题目


    题目:假如输入变量是cur_date  varchar2
        统计以下变量:
            今天的产量  cur_date
            昨天的产量  to_char(to_date(cur_date,'yyyymmdd')-1,'yyyymmdd')
            本月的产量  substr(cur_date,1,6)
            本年的产量  substr(cur_date,1,4)
            去年同期的产量 to_char(add_months(to_date(cur_date,'yyyymmdd'),-12),'yyyymmdd')
        1)用基本SQL来实现

        用FOR循环游标来实现
        考核的知识点:FOR循环,游标,时间值函数,转换函数,DECODE/CASE用法

    这个题还需各位高手。

    参考答案如下:

    select *
        from factory
        select to_char(to_date('20080602','yyyymmdd') -1,'yyyymmdd')
        from dual  
        select to_char(add_months(to_date(f.cur_date,'yyyymmdd'),-12),'yyyymmdd')
        from dual
        create table temp
        as  
        select cur_date,(select 
                         sum(case when cur_date=f.cur_date then cur_perout
                         else 0
                         end)
                         from factory) a,
                         (select 
                         sum(case when cur_date=to_char(to_date(f.cur_date,'yyyymmdd') -1,'yyyymmdd')
                         then cur_perout else 0
                         end)
                         from factory) b ,
                         (select 
                         sum(case when substr(cur_date,1,6)=substr(f.cur_date,1,6) then cur_perout
                         else 0
                         end)
                         from factory) c,
                         (select
                          sum(case when substr(cur_date,1,4)=substr(f.cur_date,1,4) then cur_perout
                          else 0
                         end)
                         from factory) d,
                         (select
                         sum(case when cur_date=to_char(add_months(to_date(f.cur_date,'yyyymmdd'),-12),'yyyymmdd')
                            then cur_perout else 0
                         end)
                         from factory) e
                         
        from factory f
        where rownum <1
       -- where cur_date='20080602';
    begin 
      for temstr in (select * from factory) loop
      insert into temp
      select temstr.cur_date,--游标(不带字段/常量)
             sum(case when cur_date=temstr.cur_date then cur_perout
                 else 0
                 end),
             sum(case when cur_date=to_char(to_date(temstr.cur_date,'yyyymmdd') -1,'yyyymmdd') 
             then cur_perout
                 else 0
                 end),
             sum(case when substr(cur_date,1,6)=substr(temstr.cur_date,1,6) then cur_perout
                 else 0
                 end),
             sum(case when substr(cur_date,1,4)=substr(temstr.cur_date,1,4) then cur_perout
                 else 0
                 end),
             sum(case when cur_date=to_char(add_months(to_date(temstr.cur_date,'yyyymmdd'),-12),'yyyymmdd') then cur_perout
                 else 0
                 end)
             from factory; 
      end loop;
    end;
      select * from temp
        
  • 相关阅读:
    CocoaPods
    Git
    LLVM
    浅入浅出数据结构(11)——简要介绍算法时间复杂度
    浅入浅出数据结构(10)——树的简介
    浅入浅出数据结构(8)——栈、后缀表达式与四则运算计算器
    浅入浅出数据结构(7)——特殊的表:队列与栈
    浅入浅出数据结构(6)——游标数组及其实现
    浅入浅出数据结构(5)——链表的操作
    浅入浅出数据结构(4)——线性表与链表
  • 原文地址:https://www.cnblogs.com/sail/p/2599583.html
Copyright © 2020-2023  润新知