题目:假如输入变量是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
分享到:
相关推荐
### Oracle存储过程、游标、函数的详解 #### 一、概述 在Oracle数据库中,存储过程、游标和函数是非常重要的组成部分,它们为数据库管理提供了强大的编程能力。通过学习这些概念,我们可以更加灵活地管理和操作...
2. **Oracle游标**:游标允许我们处理查询结果集中的每一行数据。在`oracle游标.txt`中,你可以学习到如何声明、打开、读取和关闭游标。游标在处理大量数据时非常有用,特别是在需要逐行处理或循环遍历结果集的情况...
该文件讲解了Oracle数据库中函数游标的创建以及包的定义,对数据库有更深层次的了解
其中,一个重要的功能是能够创建返回游标类型的函数,这种函数允许用户从数据库中检索并返回一组记录,而非单一值。这在处理大量数据或需要遍历整个结果集的场景下极为有用。 ### 标题:“oracle10g 函数返回游标...
在Oracle数据库中,循环游标是一种非常重要的编程技术,它允许开发者通过循环结构来处理查询结果集中的每一行数据。这种技术在处理大量数据时尤为有用,因为它可以逐行访问数据,而无需一次性将所有数据加载到内存中...
多维度查询时通常需要建立多个游标循环,查询效率无法得到保障,现在通过游标和substr()函数相结合的方式提高查询效率
Oracle提供了丰富的内置函数,如数学函数(如ROUND、TRUNC)、字符串函数(如SUBSTR、INSTR)和日期时间函数(如SYSDATE、ADD_MONTHS)。自定义函数也可以通过PL/SQL语言创建,以满足特定需求。 其次,**存储过程**...
### Oracle游标、视图和自定义函数 #### 1. 游标 **1.1 游标的优势和类型** 在数据库应用开发过程中,游标作为一种强大的工具,为开发者提供了一种处理从表中检索出的数据的有效方法,特别是在需要逐条处理数据...
**二、Oracle游标** 游标(Cursor)是数据库系统中用于处理单条记录的一种机制。在Oracle中,游标允许我们遍历查询结果集,一次处理一条记录。游标的使用场景包括循环处理结果集、有条件地更新或删除数据等。 1. **...
创建返回游标函数的基本步骤如下: 1. 定义函数:声明函数的名称、输入参数(如单位名称和日期),并指定返回类型为游标。 2. 执行查询:在函数体内编写SQL查询,查询满足条件的数据。 3. 创建游标:使用`CURSOR`...
根据给定的信息,本文将详细解释Oracle中的存储过程(Procedure)、游标(Cursor)以及函数(Function)在同步员工加班时间的应用。 ### 一、Oracle 存储过程(Procedure) 存储过程是预先编译并存储在数据库...
Oracle中的游标和函数详解 1.游标 游标是一种 PL/SQL 控制结构;可以对 SQL 语句的处理进行显示控制,便于对表的行数据 逐条进行处理。 游标并不是一个数据库对象,只是存留在内存中。 操作步骤: 声明游标 ...
综上所述,`Loop`循环、`While`循环以及`For`循环都是处理Oracle游标数据的有效方式,但各有特点: - `Loop`循环结构清晰,易于理解,适用于各种复杂逻辑的实现。 - `While`循环相比`Loop`更简洁,但需要手动管理...
根据提供的Oracle管道函数和动态游标的代码片段及描述,我们可以深入了解其背后的技术要点与实现细节。下面将逐一解析这些知识点。 ### Oracle管道函数 管道函数(Pipe-lined Function)是Oracle中一种特殊类型的...
Oracle游标是数据库管理系统中的一种数据处理机制,它允许用户按需逐行处理查询结果,而不是一次性加载所有数据。在Java编程中,我们通常通过JDBC(Java Database Connectivity)来与Oracle数据库交互,其中游标扮演...
在"游标.txt"文件中,可能包含了更多关于Oracle游标的使用实例和技巧,包括游标的声明、动态游标、游标变量、游标表达式以及游标在存储过程和函数中的应用。这些内容可以帮助你更深入地理解和掌握Oracle游标,提高你...
Oracle游标是数据库编程中非常重要的一个概念,主要用于处理SQL查询的结果集。游标允许我们按行处理数据,逐条读取结果集,而不仅仅是一次性获取所有数据。在Oracle数据库中,游标对于复杂的事务处理、动态SQL以及...
Oracle函数是数据库操作中的核心组成部分,它们允许开发人员和DBA执行各种计算、转换、查询和数据处理任务。手册中可能涵盖了以下几类函数: 1. 数学函数:如ABS(取绝对值)、MOD(取模)、ROUND(四舍五入)等,...
### Oracle游标优化 ...通过上述方法,可以在一定程度上优化Oracle游标的性能,从而提高应用程序的整体响应时间和资源利用率。需要注意的是,每种优化策略都应该根据具体的业务需求和技术环境来选择和实施。
Oracle游标是数据库编程中非常重要的一个概念,主要用于处理SQL查询的结果集。游标允许我们按需逐行处理数据,而不是一次性加载所有结果。这里详细介绍了Oracle中的三种游标类型:隐式游标、显式游标和REF游标。 1....