CREATE OR REPLACE PACKAGE BODY "DAILYREPORTNEW1" is
procedure welldailyreportnew1(startdate in varchar2,enddate in varchar2,
orgid in varchar2,my_ref_cursor out ref_cursor) is
begin
DECLARE
flg NUMBER;
sqlstr1 varchar2(1000);--创建临时表
sqlstr2 varchar2(1000);--插入数据
sqlstr3 varchar2(1000);--查询临时表
sqlstr4 varchar2(1000);--查询临时表
syzl varchar2(10);--收油总量
yyzl VARCHAR2(10);--用油总量
zkcl varchar2(10);--库存量
seqno VARCHAR2(10);--序号
orgname VARCHAR2(200);--机构名称
uporgname VARCHAR2(200);--上级机构名称
countss VARCHAR2(50);
coutsy VARCHAR2(50);
cyz VARCHAR2(10);--差异值
cursor alldate is
Select Rownum,org_id times,org_name oname
from tab_org_info where tab_org_info.up_org_id=orgid;
--查询父组织为orgid的所有子组织(编号,名称)
curdate alldate%rowtype;
BEGIN
SELECT COUNT(*) INTO flg FROM User_Tables WHERE TABLE_NAME = 'TEMP_TAB3';
sqlstr1 := 'CREATE GLOBAL TEMPORARY TABLE TEMP_TAB3(
seqno varchar2(10),
orgname varchar2(20),
uporgname varchar2(20),
syzl varchar2(10),
yyzl varchar2(10),
zkcl varchar2(10),
cyz varchar2(10)
)
ON COMMIT delete ROWS';
IF flg = 0 THEN
execute immediate 'grant create table to omstest';
execute immediate sqlstr1;
END IF;
open alldate;
loop
begin
fetch alldate into curdate;
exit when alldate%notfound;
--朱湘鄂2010-01-13
--每井队收油总量syzl
select nvl(sum(z.zsyl),0) INTO syzl from
(select nvl(toi.syl,0) as zsyl from tab_oil_info toi
where toi.org_id = curdate.times and toi.acq_date>=startdate and toi.acq_date<=enddate) z;
--每井队用油总量 yyzl
select nvl(sum(x.zyyl),0) INTO yyzl from
(select nvl(toi.yyl,0) as zyyl from tab_oil_info toi
where toi.org_id = curdate.times and toi.acq_date>=startdate and toi.acq_date<=enddate) x;
--上级机构以及井队名称
SELECT toi1.Org_Name,curdate.oname INTO uporgname,orgname FROM
tab_org_info toi1 WHERE toi1.org_id = orgid;
--每井队库存量kcl
dbms_output.put_line(curdate.times);
select min(nvl(TO_CHAR(toi.kcl),0)) into zkcl from tab_oil_info toi where toi.org_id=curdate.times and toi.acq_date>=startdate and toi.acq_date<=enddate;
-- 序号seqno
SELECT nvl(sum(seq_no),0) INTO seqno FROM tab_oil_info WHERE org_id = curdate.times ;
dbms_output.put_line(curdate.times);
/***得到差异值***/--cyz
cyz:='0';
cyz:=nvl(to_number(syzl),0)-nvl(to_number(yyzl),0)-nvl(to_number(zkcl),0);
dbms_output.put_line('差异值为:'+cyz);
if cyz is null
then
cyz:='0';
end if;
dbms_output.put_line(cyz);
execute immediate 'insert into temp_tab3(seqno,orgname,uporgname,syzl,yyzl,zkcl,cyz) values('''||seqno||''','''||orgname||''','''||uporgname||''','''||syzl||''','''||yyzl||''','''||zkcl||''','''||cyz||''')';
end;
end loop;
--收油总量
select nvl(tt.syl,0) INTO syzl from (select nvl(sum(syl),0) syl from tab_oil_info where acq_date>=startdate and acq_date<=enddate and org_id in(select org_id from tab_org_info where up_org_id=orgid)) tt;
dbms_output.put_line(syzl);
--查询用油总量
select nvl(sum(x.zyyl),0) INTO yyzl from
(select nvl(toi.yyl,0) as zyyl from tab_oil_info toi
where toi.org_id = curdate.times and toi.acq_date>=startdate and toi.acq_date<=enddate) x;
dbms_output.put_line(yyzl);
zkcl:='0';
cyz:='0';
select '总计' INTO seqno from dual;
select '','' INTO orgname,uporgname from dual;
execute immediate 'select * from temp_tab3';
execute immediate 'insert into temp_tab3(seqno,orgname,uporgname,syzl,yyzl,zkcl,cyz) values('''||seqno||''','''||orgname||''','''||uporgname||''','''||syzl||''','''||yyzl||''','''||zkcl||''','''||cyz||''')';
sqlstr3 := 'select * from temp_tab3';
open my_ref_cursor for sqlstr3;
end;
end welldailyreportnew1;
end dailyreportnew1;
分享到:
相关推荐
本文将详细介绍Oracle临时表的创建方法、使用场景以及优缺点,帮助读者更好地理解和运用这一特性。 #### 二、Oracle临时表概述 Oracle临时表是一种特殊的表,用于存储临时数据,通常用于事务处理或特定会话期间的...
需要注意的是,与SQL Server和Sybase等其他数据库系统相比,Oracle中不应在运行时动态创建临时表,而应在应用程序安装时创建。DDL操作(如创建表)开销较大,应尽量避免在运行时执行。 总结来说,Oracle的临时表...
以下将详细介绍如何在Oracle中创建表空间、临时表空间以及赋予用户对表空间的权限。 首先,我们来了解如何创建一个常规表空间: 1. **创建表空间**: 使用`CREATE TABLESPACE`语句来创建一个新的表空间。例如,...
本篇文章将深入探讨如何在Oracle存储过程中使用临时表,包括会话级临时表和事务级临时表。 ### 会话级临时表 会话级临时表(Session-Level Temporary Tables)只在创建它的会话内可见,并且在会话结束时自动删除。...
网上有人给出了佳的优化思路是: ... with子查询实际上也是用了临时表,Oracle会替你创建一张临时表,因此临时表的开销WITH子查询也会有。只要把AUTOTRACE打开你会看到REDO的开销。 关于临时表的使用至
Oracle 临时表用法 Oracle 临时表是一种特殊的表结构,它可以在数据库中临时存储数据,用于实现一些特定的应用场景。下面是 Oracle 临时表的详细知识点: 创建临时表 创建临时表的语法为: ``` CREATE GLOBAL ...
解决 Oracle 临时表空间满的问题需要通过查看当前数据库的默认临时表空间、查看当前临时表空间的大小、创建新的临时表空间、将新建的临时表空间设置为数据库的默认临时表空间、删除原来的临时表空间、创建新的临时表...
"Oracle 临时表(事务级、会话级)" Oracle 临时表是 Oracle 数据库中的一种特殊类型的表,它可以保存一个会话或事务中的数据。当会话或事务结束时,临时表中的数据自动清空,但是临时表的结构和元数据还存储在...
### Oracle中临时表的创建与使用 #### 一、引言 在Oracle数据库环境中,当处理大规模数据时,经常会遇到性能瓶颈的问题。特别是在那些数据量达到百万级别的大型系统中,如何高效地管理数据成为了关键所在。为了...
### Oracle 11g 创建临时表空间组 在Oracle 11g R2版本中,引入了临时表空间组的概念,这一特性为数据库管理提供了更大的灵活性。与传统的单个临时表空间相比,临时表空间组允许多个临时表空间协同工作,从而提高...
### Oracle 临时表空间管理与释放脚本解析 在Oracle数据库管理中,临时表空间(Temporary Tablespace)的管理是一项非常重要的任务。合理的管理和优化临时表空间不仅可以提高系统的性能,还可以帮助解决空间不足等...
本文档将深入探讨如何在Oracle中创建临时表空间,并介绍一款方便的一键导入、导出工具。 首先,我们来看如何创建临时表空间。在Oracle中,创建临时表空间的SQL语句通常如下: ```sql CREATE TEMPORARY TABLESPACE ...
临时表在Oracle中用于在单个会话中存储临时数据,这些数据只对创建它们的会话可见,会话结束时,临时表及其数据都会被自动删除。 1. **创建临时表**:使用`CREATE GLOBAL TEMPORARY TABLE`语句创建临时表,例如: ...
临时表可以在不同的数据库管理系统中使用,本文将对 MS SQLSERVER、Oracle 和 DB2 中的临时表进行介绍。 MS SQL SERVER 中的临时表 在 MS SQL SERVER 中,临时表是以井号 (#) 或数学符号 (##) 开头的表名。临时表...
### Oracle 临时表空间详解 ...总结而言,通过上述内容我们可以了解到Oracle数据库中临时表空间的基本概念、查询方法以及如何进行创建、修改和删除等操作。掌握这些知识点有助于更好地管理和优化数据库性能。
在Oracle数据库管理中,表空间...以上就是Oracle数据库中创建表空间、临时表、用户及用户授权的基本步骤。在实际操作中,DBA应根据业务需求和安全性考虑来合理规划和管理这些元素,确保数据库的稳定运行和数据的安全。
### Oracle临时表详解 #### 一、Oracle临时表概述 在Oracle数据库中,临时表是一种特殊类型的数据表,主要用于存储暂时性的数据。与永久表不同的是,临时表中的数据不会一直保留,而是根据不同的条件(如事务结束...
Oracle 临时表空间是Oracle数据库管理系统中的一个重要组成部分,主要用于存储执行特定操作时产生的临时数据,例如排序、连接和聚合操作。这些操作在处理大量数据时尤为常见,因此了解临时表空间的使用注意事项对于...
默认情况下,如果没有明确指定,Oracle将创建的临时表视为事务临时表。为清晰起见,建议使用`ON COMMIT DELETE ROWS`关键字来标识事务临时表。 - **数据变化**:在事务临时表中插入的数据仅在当前事务内有效。事务...
Oracle 19c创建表空间及用户