`
猪↘專屬|华
  • 浏览: 164039 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

oracle动态的创建临时表

阅读更多

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;

0
0
分享到:
评论

相关推荐

    Oracle 临时表用法

    本文将详细介绍Oracle临时表的创建方法、使用场景以及优缺点,帮助读者更好地理解和运用这一特性。 #### 二、Oracle临时表概述 Oracle临时表是一种特殊的表,用于存储临时数据,通常用于事务处理或特定会话期间的...

    ORACLE中临时表

    需要注意的是,与SQL Server和Sybase等其他数据库系统相比,Oracle中不应在运行时动态创建临时表,而应在应用程序安装时创建。DDL操作(如创建表)开销较大,应尽量避免在运行时执行。 总结来说,Oracle的临时表...

    学习oracle创建一个表空间创建临时表空间创建用户表空间资源的权限

    以下将详细介绍如何在Oracle中创建表空间、临时表空间以及赋予用户对表空间的权限。 首先,我们来了解如何创建一个常规表空间: 1. **创建表空间**: 使用`CREATE TABLESPACE`语句来创建一个新的表空间。例如,...

    Oracle存储过程中使用临时表

    本篇文章将深入探讨如何在Oracle存储过程中使用临时表,包括会话级临时表和事务级临时表。 ### 会话级临时表 会话级临时表(Session-Level Temporary Tables)只在创建它的会话内可见,并且在会话结束时自动删除。...

    Oracle 临时表之临时表的应用问题

    网上有人给出了佳的优化思路是: ...  with子查询实际上也是用了临时表,Oracle会替你创建一张临时表,因此临时表的开销WITH子查询也会有。只要把AUTOTRACE打开你会看到REDO的开销。  关于临时表的使用至

    oracle临时表用法

    Oracle 临时表用法 Oracle 临时表是一种特殊的表结构,它可以在数据库中临时存储数据,用于实现一些特定的应用场景。下面是 Oracle 临时表的详细知识点: 创建临时表 创建临时表的语法为: ``` CREATE GLOBAL ...

    Oracle临时表空间满的解决步骤

    解决 Oracle 临时表空间满的问题需要通过查看当前数据库的默认临时表空间、查看当前临时表空间的大小、创建新的临时表空间、将新建的临时表空间设置为数据库的默认临时表空间、删除原来的临时表空间、创建新的临时表...

    oracle临时表(事务级、会话级).docx

    "Oracle 临时表(事务级、会话级)" Oracle 临时表是 Oracle 数据库中的一种特殊类型的表,它可以保存一个会话或事务中的数据。当会话或事务结束时,临时表中的数据自动清空,但是临时表的结构和元数据还存储在...

    Oracle中临时表的创建

    ### Oracle中临时表的创建与使用 #### 一、引言 在Oracle数据库环境中,当处理大规模数据时,经常会遇到性能瓶颈的问题。特别是在那些数据量达到百万级别的大型系统中,如何高效地管理数据成为了关键所在。为了...

    oracle11g创建临时表空间组

    ### Oracle 11g 创建临时表空间组 在Oracle 11g R2版本中,引入了临时表空间组的概念,这一特性为数据库管理提供了更大的灵活性。与传统的单个临时表空间相比,临时表空间组允许多个临时表空间协同工作,从而提高...

    Oracle释放临时表空间脚本

    ### Oracle 临时表空间管理与释放脚本解析 在Oracle数据库管理中,临时表空间(Temporary Tablespace)的管理是一项非常重要的任务。合理的管理和优化临时表空间不仅可以提高系统的性能,还可以帮助解决空间不足等...

    oracle创建临时表空间文档及工具

    本文档将深入探讨如何在Oracle中创建临时表空间,并介绍一款方便的一键导入、导出工具。 首先,我们来看如何创建临时表空间。在Oracle中,创建临时表空间的SQL语句通常如下: ```sql CREATE TEMPORARY TABLESPACE ...

    oracle自增长与临时表

    临时表在Oracle中用于在单个会话中存储临时数据,这些数据只对创建它们的会话可见,会话结束时,临时表及其数据都会被自动删除。 1. **创建临时表**:使用`CREATE GLOBAL TEMPORARY TABLE`语句创建临时表,例如: ...

    主流数据库中临时表的使用

    临时表可以在不同的数据库管理系统中使用,本文将对 MS SQLSERVER、Oracle 和 DB2 中的临时表进行介绍。 MS SQL SERVER 中的临时表 在 MS SQL SERVER 中,临时表是以井号 (#) 或数学符号 (##) 开头的表名。临时表...

    oracle-临时表空间

    ### Oracle 临时表空间详解 ...总结而言,通过上述内容我们可以了解到Oracle数据库中临时表空间的基本概念、查询方法以及如何进行创建、修改和删除等操作。掌握这些知识点有助于更好地管理和优化数据库性能。

    Oracle创建表空间、临时表、用户及用户授权

    在Oracle数据库管理中,表空间...以上就是Oracle数据库中创建表空间、临时表、用户及用户授权的基本步骤。在实际操作中,DBA应根据业务需求和安全性考虑来合理规划和管理这些元素,确保数据库的稳定运行和数据的安全。

    Oracle临时表

    ### Oracle临时表详解 #### 一、Oracle临时表概述 在Oracle数据库中,临时表是一种特殊类型的数据表,主要用于存储暂时性的数据。与永久表不同的是,临时表中的数据不会一直保留,而是根据不同的条件(如事务结束...

    Oracle 临时表空间使用注意

    Oracle 临时表空间是Oracle数据库管理系统中的一个重要组成部分,主要用于存储执行特定操作时产生的临时数据,例如排序、连接和聚合操作。这些操作在处理大量数据时尤为常见,因此了解临时表空间的使用注意事项对于...

    oracle临时表操作学习资料

    默认情况下,如果没有明确指定,Oracle将创建的临时表视为事务临时表。为清晰起见,建议使用`ON COMMIT DELETE ROWS`关键字来标识事务临时表。 - **数据变化**:在事务临时表中插入的数据仅在当前事务内有效。事务...

    Oracle 19c创建表空间及用户.txt

    Oracle 19c创建表空间及用户

Global site tag (gtag.js) - Google Analytics