`
jiangyang1986
  • 浏览: 76609 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

建立临时表的存储过程(带返回的游标)

 
阅读更多
create or replace package welldailycross is
  type ref_cursor is ref cursor;  --建立带返回的游标
  procedure prowelldailycross(startTime in varchar2,endTime in varchar2, orgid in varchar2,my_ref_cursor out ref_cursor);
end welldailycross;

create or replace package body welldailycross is
       procedure prowelldailycross(startTime in varchar2,endTime 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);--查询临时表

                 usertotal varchar2(20); --用户得到和所有
                 datenow varchar2(20); ---时间
                 org_id VARCHAR2(10);--机构编号
                 orgname varchar2(20);--机构名称

                 cursor alldate is
                 Select Rownum,(to_date(startTime,'yyyy-mm-dd')+Rownum-1) times
                 from dual connect by rownum<= to_date(endTime,'yyyy-mm-dd')-to_date(startTime,'yyyy-mm-dd') +1;--查询开始时间和结束时间这间所有时间
                 curdate alldate%rowtype;
                 BEGIN
                      SELECT COUNT(*) INTO flg FROM User_Tables WHERE TABLE_NAME = 'TEMP_TAB2';
                       sqlstr1 := 'CREATE   GLOBAL   TEMPORARY   TABLE   TEMP_TAB2(
                        usertotal   VARCHAR2(20),
                        datenow varchar2(20),
                        org_id varchar2(10),
                        orgname varchar2(20)
                      )
                      ON   COMMIT   delete   ROWS';
                 IF flg = 0 THEN
                         execute immediate 'grant create table to omsdata';
                         execute immediate sqlstr1;
                 END IF;
                 open alldate;
                      loop
                          begin
                            fetch alldate into curdate;
                            exit when alldate%notfound;
                               select nvl(sum(x.oiltotal+y.otherstotal),0) as total,
                                 x.nowtime as nowdate into usertotal,datenow
                                 from
                                    (select
                                      nvl(sum(toi.scyyl1+toi.scyyl2),0) as oiltotal ,
                                      to_char(curdate.times,'yyyy-mm-dd') as nowtime
                                       from
                                       tab_oil_info toi
                                       where toi.org_id=orgid and toi.acq_date=to_char(curdate.times,'yyyy-mm-dd'))x,
                                    (select
                                      nvl(sum(tsu.tsyyl),0) as otherstotal
                                      from
                                      tab_spec_use tsu
                                      where tsu.org_id=orgid
                                      and tsu.acq_date =to_char(curdate.times,'yyyy-mm-dd'))y group by x.oiltotal,x.nowtime;
                                 select toi.org_name into orgname from tab_org_info toi where toi.org_id=orgid;
                            sqlstr2 := 'insert into temp_tab2 values('''||usertotal||''','''||datenow||''','''||orgid||''','''||orgname||''')';
                            execute   immediate   sqlstr2;
                          end;
                      end loop;
                 sqlstr3 := 'select * from temp_tab2';
                 open my_ref_cursor for sqlstr3;
                  --loop
                    --begin
                    --  fetch my_ref_cursor into usertotal,datenow,org_id;
                     -- exit when my_ref_cursor%notfound;
                    --  dbms_output.put_line('日期'||datenow||'每天总收油量:'||usertotal||'每天用油总量'||org_id);
                  --  end;
             --   end loop;
                 end;
       end prowelldailycross;
end welldailycross;
分享到:
评论

相关推荐

    Java调用oracle存储过程通过游标返回临时表

    如果存储过程返回游标,我们需要声明一个`OUT`参数来接收。 4. **执行存储过程**:通过`pstmt.execute()`执行存储过程。这将打开一个游标,我们可以从游标中获取结果。 5. **处理游标结果**:使用`...

    ASA存储过程.doc

    建立临时表** 临时表是在存储过程中创建的一种特殊类型的表,仅在当前会话中可见,并且会在存储过程执行结束后自动删除。例如,创建一个名为`TempTab`的临时表: ```sql BEGIN DECLARE LOCAL TEMPORARY TABLE ...

    用java调用oracle存储过程总结

    2. 创建一个临时表,让存储过程将结果写入临时表,然后在Java中通过查询临时表获取数据。 3. 如果可能,修改存储过程,使其返回XML或JSON格式的数据,然后在Java中解析这些格式的数据。 总的来说,调用Oracle存储...

    SQL-Server-2012数据库技术与应用11.pptx

    STATIC 与 INSENSITIVE 含义相同,在系统 tempdb 数据库中创建临时表存储游标使用的数据,即游标不会随基本表内容而变化,同时也无法通过游标来更新基本表。 KEYSET 指定游标中列的顺序是固定的,并且在 tempdb 内...

    vfp函数与命令大全.pdf

    vfp函数与命令大全.pdf Visual FoxPro 是一款功能强大且灵活的数据库管理系统,它...32. SQLCOLUMNS():把指定数据源表的列名和关于每列的信息存储到一个 VisualFoxPro 临时表中。 33. SQLCOMMIT():提交一个事务。

    DB2使用经验积累

    13. **从存储过程返回结果集(游标)的用法**:存储过程可以通过定义输出参数或返回一个游标来返回结果集。 14. **类型转换函数**:DB2提供了一系列类型转换函数,如`CAST`、`CONVERT`等,用于在不同数据类型之间进行...

    全国信息化工程师考证学习.pdf

    5. 临时表和表变量的叙述错误:临时表的前缀是"#",表变量的前缀是"@" 6. 使用 ADO 连接数据库后,对数据库进行操作的一系列步骤中,不正确的是 fabcedg,因为正确的步骤应该是 acefdbg。 7. 能反映员工入职时间...

    DB2使用经验积累及心得

    - **从存储过程返回结果集(游标)的用法**:使用`RETURN NEXT FROM cursor_name`。 - **类型转换函数**:如`CAST(column AS data_type)`进行类型转换。 - **存储过程的互相调用**:通过`CALL 存储过程名称`来调用其他...

    db2开发经验

    15. **从存储过程返回结果集(游标)的用法:** 存储过程可以返回一个游标作为结果集,以便应用程序逐行处理数据。 16. **类型转换函数:** 常见的类型转换函数包括`CAST`和`CONVERT`,用于在不同类型之间转换数据。 ...

    DB2手册pdf

    在存储过程中返回结果集通常涉及声明和打开游标,然后将其作为输出参数返回。例如: ```sql CREATE PROCEDURE MyProcedure (OUT cursor_result CURSOR FOR SELECT * FROM my_table) BEGIN DECLARE CONTINUE HANDLER...

    技术支持面试题实用.pdf

    B、C选项错误,新表不是临时表,可以进行增删改操作;D选项正确。 6. SQL Server的索引,A、B、C选项正确。聚集索引决定物理顺序,非聚集索引决定逻辑顺序;一个表仅能有一个聚集索引,但可以有多个非聚集索引;...

    DB2数据库用户手册

    - **从存储过程返回结果集(游标)的用法**:通过定义游标并使用`FETCH`命令来逐行检索结果集。 - **类型转换函数**:如`CAST`和`CONVERT`等函数可用于类型转换。 - **存储过程的互相调用**:一个存储过程可以调用另一...

    优化数据库的方法.doc

    尽量避免使用游标,或者在必要时将数据转移到临时表,然后在临时表上操作。 7. **监控和调试**:使用`SET SHOWPLAN_ALL ON`来查看查询执行计划,了解查询如何运行并找出潜在的性能瓶颈。`DBCC`命令用于检查数据库的...

    博客园大牛CareSon博客合集

    SQL Server提供了系统存储过程sys.sp_reset_connection,用来清理掉当前连接的上下文信息,如未提交的事务、可用的游标、临时表等,以避免后续使用同一个连接的用户受到之前连接上下文的影响。当调用Connection....

    DB2编程序技巧(1)

    本文主要探讨DB2编程中的一些技巧,包括创建存储过程、使用临时表、获取指定数量的记录、游标的使用以及类似DECODE的操作。 首先,关于创建存储过程,DB2有特定的语法要求。在编写`CREATE PROCEDURE`语句时,务必...

    数据库面试宝典面试宝典

    外键则用于建立两张表之间的关联,通常是一个表的外键字段引用另一个表的主键字段,确保了数据之间的参照完整性。 11. 索引对在线事务处理(OLTP)表的影响 在OLTP表中,过度索引会增加数据更新、插入或删除操作的...

    10.ESQL/C中单记录的检索和查询.doc

    - **`INTO TEMP`**:用于将结果集存储到临时表中。 #### 三、`SELECT`语句的交互式形式 在DBACCESS等交互式环境中,`SELECT`语句的一般语法如下: ```sql SELECT [UNIQUE | DISTINCT | ALL] SelectList FROM ...

Global site tag (gtag.js) - Google Analytics