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

带返回参数为游标的存储过程(运用嵌套表)

 
阅读更多
create or replace type PostType as Object(
   total varchar2(20),
   nowdate varchar2(200)
);


create or replace type PostTypeTable is table of PostType;


create or replace package WellCorss is

   type ref_cursor is ref cursor;  --建立带返回的游标 
 

  procedure GetTongBiByConds(orgid in varchar2,startTime in varchar2,endTime in varchar2,my_ref_cursor out WellCorss.ref_cursor);
 
end WellCorss;


create or replace package body WellCorss is

procedure GetTongBiByConds(orgid in varchar2,startTime in varchar2,endTime in varchar2,my_ref_cursor out WellCorss.ref_cursor)
is
usertotal number; --用户得到和所有
datenow varchar2(20); ---时间
v_PostTypeTable PostTypeTable;----建立表数据
begin
declare
  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
      open alldate;--打开游标
        loop
           begin
             v_PostTypeTable:=PostTypeTable(); --初始化嵌套表         
           fetch alldate into curdate; --循环所有的时间
             exit when alldate%notfound;           
             dbms_output.put_line(to_char(curdate.times,'yyyy-mm-dd'));--行 
             -----------查询用油信息                                
               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;               
                 --for i in 1..curdate.Rownum loop
                   v_PostTypeTable.Extend;                 
                   v_PostTypeTable(v_PostTypeTable.Count):=PostType(usertotal,datenow);
                   v_PostTypeTable.Extend;
                   dbms_output.put_line(usertotal||datenow); 
                --end loop;      
               end;             
                open my_ref_cursor for select * from table(cast (v_PostTypeTable as PostTypeTable));
         end loop;
    
         -- close alldate;--关闭游标
     end;
end;
end WellCorss;
分享到:
评论

相关推荐

    SQL+Server的事务、游标、存储过程及触发器.doc

    **存储过程(Stored Procedures)**是一组预编译的SQL语句,可以接受参数,返回结果,甚至可以嵌套其他存储过程。存储过程提高了代码的重用性,减少了网络流量,并且可以增强安全性。创建存储过程使用`CREATE ...

    游标存取 利用递归再将此下属的下属插入返回表

    1. **利用递归再将此下属的下属插入返回表**:这表明我们需要通过递归的方式来处理多层嵌套的下属关系,并将这些下属的信息存储到一个返回表中。 2. **遍历游标**:利用游标来遍历数据记录,逐条处理下属信息。 3. *...

    oracle游标优化

    - **循环游标**(Ref Cursor):可以作为参数传递给存储过程或函数,实现游标数据的动态返回。 3. **作用**: - **数据检索**:从表或视图中获取数据。 - **数据更新**:基于查询结果更新数据库中的数据。 - **...

    基于ADO接口技术的Oracle数据库嵌套表的开发研究.pdf

    在本文中,研究了基于ADO接口技术的Oracle数据库嵌套表的开发过程,特别是涉及到的ADO技术、VC平台下的数据库嵌套表的开发,以及使用ParameterPtr接口对象在其中的作用。为了更全面地理解这一研究,我们首先需要掌握...

    db2 存储过程实例

    2. 嵌套存储过程:在存储过程中可以调用其他存储过程。 3. 游标型存储过程:使用游标处理多行记录。 4. 多语句事务型存储过程:在一个存储过程中执行多个语句,保证事务的原子性。 六、存储过程的调试与优化 DB2...

    SQL SERVER数据库开发之存储过程应用.rar

    总而言之,"SQL SERVER数据库开发之存储过程应用"教程会涵盖以上这些核心概念,并可能深入到高级主题,如动态SQL、游标、异常处理、临时表和变量的使用等。通过学习和实践,开发者可以提升在SQL Server环境下的...

    sqlserver 存储过程

    这里定义了一个名为`myProcedure`的存储过程,接收两个参数`@param1`和`@param2`。 四、调用存储过程 调用存储过程有两种方式:动态SQL和静态SQL。 1. **动态SQL**:将存储过程名和参数拼接成字符串,然后使用`EXEC...

    oracle存储过程

    在Oracle中,存储过程有多种类型,包括简单过程、带参数的过程、带有结果集的过程(游标)、带有异常处理的过程等。例如,你可以创建一个带参数的存储过程来处理特定的输入数据: ```sql CREATE OR REPLACE ...

    DB2存储过程入门实例

    1. 减少嵌套层次:过多的嵌套可能导致性能下降,应尽量简化存储过程的逻辑结构。 2. 使用索引:为WHERE子句中的列创建索引,提高查询速度。 3. 避免全表扫描:合理设计SQL语句,避免不必要的全表扫描。 4. 编程技巧...

    SQL SERVER的存储过程语法 SQL SERVER 2000 安装指南.doc

    SQL Server的存储过程是数据库管理系统中的重要组成部分,它是一组预先定义并编译好的Transact-SQL语句,可以接受参数并返回结果。在SQL Server 2000中,存储过程可以创建为永久性对象,供多次重复使用,也可以创建...

    MySQL 5.0存储过程

    可以为存储过程设置特定的访问权限,限制用户对数据库表的直接操作,降低数据泄露或误操作的风险。例如,你可能只想让某些用户执行特定的查询,而不是给他们完全的SELECT权限。 MySQL 5.0版本还引入了几个新特性,...

    精通Oracle核心技术和项目实战之存储过程.pptx

    存储过程支持参数输入和输出,可以嵌套调用,对于数据转换和报表查询非常有用。 14.1.2 存储过程的作用 - **简化复杂操作**:将多条SQL语句组合成一个过程,减少重复代码。 - **增加数据独立性**:存储过程封装了...

    超详细Oracle存储过程使用手册,只收1分

    4. 嵌套表函数:返回一个嵌套表类型的结果集。 5. 游标函数:返回游标类型,允许逐行处理结果集。 六、存储过程的权限管理 Oracle提供了GRANT和REVOKE语句来控制用户对存储过程的访问权限。开发者可以根据需要指定...

    oracle存储过程学习经典[语法+实例+调用]

    Oracle 存储过程是数据库管理中的重要组成...实际应用中,根据具体需求,还可以涉及到更复杂的逻辑处理,如游标的使用、存储过程的嵌套以及并发控制等。在编写和调用存储过程时,务必注意异常处理,确保程序的健壮性。

    oracle存储过程入门必备

    `test_xg_p6`展示了一个使用游标`cursor1`从`hotel`表中获取满足条件的所有记录,并将它们拼接成一个字符串返回的存储过程。 ```sql CREATE OR REPLACE PROCEDURE test_xg_p6(x_out OUT VARCHAR2) IS temp_result ...

    oracle存储过程1.ppt

    - 存储过程可以处理复杂的数据结构,包括集合类型(如VARRAYs和 Associative Arrays)和嵌套表。 - CTE可以在存储过程中用于临时创建结果集,简化复杂的查询逻辑。 5. 异常处理: - 使用`BEGIN...EXCEPTION......

    存储过程经典中的经典

    这个例子很好地演示了如何在存储过程中实现复杂的跨表更新操作,同时展示了如何通过嵌套循环处理多层数据依赖关系。 #### 4. 异常处理与错误码抛出 最后,代码片段还展示了如何在存储过程中进行错误检查和异常抛出...

    Oracle触发器与存储过程高级编程

    存储过程是预编译并存储在数据库中的SQL代码块,它可以接受输入参数,返回输出参数,并且可以包含复杂的逻辑控制结构。存储过程的优点在于提高应用程序的性能、减少网络流量、增强代码重用性以及提供更高的安全性和...

    SQL Server游标的使用/关闭/释放/优化小结

    一方面,如果遇到现有的系统已经使用了游标,或者在尝试了其他替代方法(如嵌套循环、子查询、临时表、表变量或用户自定义函数)都无法解决的问题时,游标可能是一个必要的工具。另一方面,理解并能正确使用游标,...

    oracle 存储过程分页示例

    在这个例子中,我们定义了一个名为`get_paged_data`的存储过程,接受两个输入参数`p_page_num`和`p_limit`,分别代表页码和每页记录数。返回类型为`SYS_REFCURSOR`,它是一个游标,可以用于在PL/SQL块中处理查询结果...

Global site tag (gtag.js) - Google Analytics