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;
分享到:
相关推荐
**存储过程(Stored Procedures)**是一组预编译的SQL语句,可以接受参数,返回结果,甚至可以嵌套其他存储过程。存储过程提高了代码的重用性,减少了网络流量,并且可以增强安全性。创建存储过程使用`CREATE ...
1. **利用递归再将此下属的下属插入返回表**:这表明我们需要通过递归的方式来处理多层嵌套的下属关系,并将这些下属的信息存储到一个返回表中。 2. **遍历游标**:利用游标来遍历数据记录,逐条处理下属信息。 3. *...
- **循环游标**(Ref Cursor):可以作为参数传递给存储过程或函数,实现游标数据的动态返回。 3. **作用**: - **数据检索**:从表或视图中获取数据。 - **数据更新**:基于查询结果更新数据库中的数据。 - **...
在本文中,研究了基于ADO接口技术的Oracle数据库嵌套表的开发过程,特别是涉及到的ADO技术、VC平台下的数据库嵌套表的开发,以及使用ParameterPtr接口对象在其中的作用。为了更全面地理解这一研究,我们首先需要掌握...
2. 嵌套存储过程:在存储过程中可以调用其他存储过程。 3. 游标型存储过程:使用游标处理多行记录。 4. 多语句事务型存储过程:在一个存储过程中执行多个语句,保证事务的原子性。 六、存储过程的调试与优化 DB2...
总而言之,"SQL SERVER数据库开发之存储过程应用"教程会涵盖以上这些核心概念,并可能深入到高级主题,如动态SQL、游标、异常处理、临时表和变量的使用等。通过学习和实践,开发者可以提升在SQL Server环境下的...
这里定义了一个名为`myProcedure`的存储过程,接收两个参数`@param1`和`@param2`。 四、调用存储过程 调用存储过程有两种方式:动态SQL和静态SQL。 1. **动态SQL**:将存储过程名和参数拼接成字符串,然后使用`EXEC...
在Oracle中,存储过程有多种类型,包括简单过程、带参数的过程、带有结果集的过程(游标)、带有异常处理的过程等。例如,你可以创建一个带参数的存储过程来处理特定的输入数据: ```sql CREATE OR REPLACE ...
1. 减少嵌套层次:过多的嵌套可能导致性能下降,应尽量简化存储过程的逻辑结构。 2. 使用索引:为WHERE子句中的列创建索引,提高查询速度。 3. 避免全表扫描:合理设计SQL语句,避免不必要的全表扫描。 4. 编程技巧...
SQL Server的存储过程是数据库管理系统中的重要组成部分,它是一组预先定义并编译好的Transact-SQL语句,可以接受参数并返回结果。在SQL Server 2000中,存储过程可以创建为永久性对象,供多次重复使用,也可以创建...
可以为存储过程设置特定的访问权限,限制用户对数据库表的直接操作,降低数据泄露或误操作的风险。例如,你可能只想让某些用户执行特定的查询,而不是给他们完全的SELECT权限。 MySQL 5.0版本还引入了几个新特性,...
存储过程支持参数输入和输出,可以嵌套调用,对于数据转换和报表查询非常有用。 14.1.2 存储过程的作用 - **简化复杂操作**:将多条SQL语句组合成一个过程,减少重复代码。 - **增加数据独立性**:存储过程封装了...
4. 嵌套表函数:返回一个嵌套表类型的结果集。 5. 游标函数:返回游标类型,允许逐行处理结果集。 六、存储过程的权限管理 Oracle提供了GRANT和REVOKE语句来控制用户对存储过程的访问权限。开发者可以根据需要指定...
Oracle 存储过程是数据库管理中的重要组成...实际应用中,根据具体需求,还可以涉及到更复杂的逻辑处理,如游标的使用、存储过程的嵌套以及并发控制等。在编写和调用存储过程时,务必注意异常处理,确保程序的健壮性。
`test_xg_p6`展示了一个使用游标`cursor1`从`hotel`表中获取满足条件的所有记录,并将它们拼接成一个字符串返回的存储过程。 ```sql CREATE OR REPLACE PROCEDURE test_xg_p6(x_out OUT VARCHAR2) IS temp_result ...
- 存储过程可以处理复杂的数据结构,包括集合类型(如VARRAYs和 Associative Arrays)和嵌套表。 - CTE可以在存储过程中用于临时创建结果集,简化复杂的查询逻辑。 5. 异常处理: - 使用`BEGIN...EXCEPTION......
这个例子很好地演示了如何在存储过程中实现复杂的跨表更新操作,同时展示了如何通过嵌套循环处理多层数据依赖关系。 #### 4. 异常处理与错误码抛出 最后,代码片段还展示了如何在存储过程中进行错误检查和异常抛出...
存储过程是预编译并存储在数据库中的SQL代码块,它可以接受输入参数,返回输出参数,并且可以包含复杂的逻辑控制结构。存储过程的优点在于提高应用程序的性能、减少网络流量、增强代码重用性以及提供更高的安全性和...
一方面,如果遇到现有的系统已经使用了游标,或者在尝试了其他替代方法(如嵌套循环、子查询、临时表、表变量或用户自定义函数)都无法解决的问题时,游标可能是一个必要的工具。另一方面,理解并能正确使用游标,...
在这个例子中,我们定义了一个名为`get_paged_data`的存储过程,接受两个输入参数`p_page_num`和`p_limit`,分别代表页码和每页记录数。返回类型为`SYS_REFCURSOR`,它是一个游标,可以用于在PL/SQL块中处理查询结果...