在开发过程的中,我们经常要用到Oracle游标来进行相关的统计(不用临时表)并且返回其统计结果,但是游标的后面SQL语句往往是动态的,例如select * from tablename where ?order ?.”?”代表条件,这样该如何处理呢?
在同事的帮助下我实践了一下。总结出来。
假设tablename表中有field如下:
1.定义游标
2.创建类型
创建的类型与tablename中表的fields一致,当然也要看你实际是否要统计所有的fields.
3.创建表类型
4.在存储过程或者函数中使用,下面在函数中使用(存储过程中不能用return一个表结构,要用到临时表)

这里是循环过程
这里是你要处理的统计过程,中间的过程我没有做统计,各位在实践中按需要自己添加。
【编辑推荐】
SQL 定时执行存储过程
如果是SQL Server2000,就在企业管理器里添加一个作业1、开启代理服务sql server agent2、在企业管理器里,打开“管理—>sqlserver代理—>作业”,新增作业,新建“步骤”,在步骤里填入你要执行的语句,比如“exec abc”到“命令”框里。 然后新建“调度”。 设置好自动执行的时间。 3、启动作业。
oracle数据库,sql语句保存在A表B字段中,现需执行B字段中的SQL语句。如何使用一条SQL语句一次性查询到?
你是想将B字段中所有SQL的结果合并吧?如果保存的是SQL,那么只能用游标一条条执行,将结果统一放到一个表中后,再查询出来。
oracle存储过程中打开游标有几种方法?用open直接打开?还是用open *** for***?
两种方法1.声明游标时写好SELECT语句,如CURSOR r_cur1 IS select *** from tableName where 条件;使用时 OPEN r_cur1; LOOP FETCH *** INTO variable; EXIT WHEN r_cur1%NOTfound OR r_cur1%NOTFOUND IS NULL;。 。 。 2.声明游标ccc sys_refcursor;使用时 open ccc for select dept_code,dept_name from _dict; loop fetch ccc into aa,bb; exit when ccc%notfound; 。 。 。 end loop; close ccc;
发表评论