oracle调用子存储过程+游标循环实例
一,有子节点的部门的子节点的排序,调用子存储过程
CREATE OR REPLACE PROCEDURE "PRO_INIT_SORT" AS
CURSOR cur_department_all IS select * from tbl_department;
VAR_COUNT NUMBER ;
VAR_OUT_COUNT NUMBER := 0;
BEGIN
FOR department_row IN cur_department_all LOOP
SELECT COUNT(1) INTO VAR_COUNT FROM tbl_department WHERE unit_id = department_row.unit_id AND department_supercode = department_row.department_code ;
--上述查询的是有所有的子节点的部门
IF VAR_COUNT != 0 THEN
--dbms_output.put_line(department_row.unit_id||'-'||department_row.department_code||'-'||var_count);
PRO_INIT_DEPARTMENT_SORT(department_row.unit_id , department_row.department_id) ;
END IF ;
VAR_OUT_COUNT := VAR_OUT_COUNT + 1 ;
END LOOP ;
DBMS_OUTPUT.PUT_LINE('总数:'||VAR_OUT_COUNT);
END PRO_INIT_SORT ;
CREATE OR REPLACE PROCEDURE "PRO_INIT_DEPARTMENT_SORT"
(
UNIT_ID IN NUMBER ,
SUPER_CODE IN NUMBER
)
-- 初始化TBL_DEPARTMENT表的DEPARTMENT_SORT字段 以同DEPARTMENT_SUPERCODE方式查询使用rownum值更新DEPARTMENT_SORT字段
AS
-- CURSOR cur_department IS SELECT * FROM tbl_department where unit_id = TARGET_UNIT_ID and department_supercode = TARGET_SUPERCODE ORDER BY department_sort ASC;
CURSOR cur_department IS SELECT rownum rn , d.* FROM tbl_department d where unit_id = UNIT_ID and department_supercode = SUPER_CODE;
BEGIN
FOR department_row IN cur_department LOOP
update tbl_department set department_sort = department_row.rn where department_id = department_row.department_id ;
-- NULL ;
END LOOP ;
-- NULL;
END PRO_INIT_DEPARTMENT_SORT;
注意:COUNT(1)和COUNT(*)
在数据记录都不为空的时候查询出来结果上没有差别的.
但当COUNT(1)查询的那列有空的时候空的是要被去掉的不记入统计中.这样查询出来的结果是不一样的.
二,没有子节点的排序
CREATE OR REPLACE PROCEDURE "INT_SORT_N" AS
P_OUT NUMBER;
P_COUNT NUMBER:=0;
CURSOR CUR_DEPARTMENT IS SELECT T.UNIT_ID FROM TBL_DEPARTMENT T GROUP BY T.UNIT_ID ORDER BY T.UNIT_ID;
BEGIN
FOR DEP_ROW IN CUR_DEPARTMENT LOOP
SELECT COUNT(1) INTO P_OUT FROM TBL_DEPARTMENT T WHERE T.UNIT_ID = DEP_ROW.UNIT_ID AND T.DEPARTMENT_SUPERCODE = 0;
DBMS_OUTPUT.put_line('UID--'||DEP_ROW.UNIT_ID||'--部门--'||P_OUT);
INT_DEPARMENT_SORT(DEP_ROW.UNIT_ID);
P_COUNT := P_COUNT + 1;
END LOOP;
DBMS_OUTPUT.put_line('总数:'||P_COUNT);
END;
create or replace procedure INT_DEPARMENT_SORT(UNIT_ID2 IN NUMBER) AS
CURSOR DEPARTMENT_ALL IS SELECT rownum rn,T.* FROM TBL_DEPARTMENT T WHERE T.UNIT_ID = UNIT_ID2 AND T.DEPARTMENT_SUPERCODE = 0 ORDER BY T.DEPARTMENT_ID;
begin
FOR DEP_ROW IN DEPARTMENT_ALL LOOP
--dbms_output.put_line('---'||UNIT_ID2);
UPDATE TBL_DEPARTMENT T SET T.DEPARTMENT_SORT = DEP_ROW.RN WHERE T.DEPARTMENT_ID = DEP_ROW.DEPARTMENT_ID;
END LOOP;
end INT_DEPARMENT_SORT;
oracle调用子存储过程+游标循环实例的更多相关文章
- SQL存储过程+游标 循环批量()操作数据
本人收集的,挺有用的 1. 利用游标循环更新.删除MemberAccount表中的数据 DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT * FROM dbo.M ...
- php调用mysql存储过程游标
<?php $dbtype = 'mysql'; $host = 'localhost'; $dbname = 'test'; $dsn = "$dbtype:host=$host;d ...
- Oracle创建表语句(Create table)语法详解及示例、、 C# 调用Oracle 存储过程返回数据集 实例
Oracle创建表语句(Create table)语法详解及示例 2010-06-28 13:59:13| 分类: Oracle PL/SQL|字号 订阅 创建表(Create table)语法详解 ...
- ORACLE存储过程,循环语法和游标
1.定义所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中.在使用时候,用户通过指定已经定义的存储过程名字并给出 ...
- PHP调用MYSQL存储过程实例
PHP调用MYSQL存储过程实例 标签: mysql存储phpsqlquerycmd 2010-09-26 11:10 11552人阅读 评论(3) 收藏 举报 实例一:无参的存储过程$conn = ...
- J2EE之oracle、mysql存储过程调用
最近几天在研究hibernate.JPA对存储过程的调用,主要是针对有返回结果集的存储过程的调用方法,个人感觉存储过程是个好东西,虽然说heibernate对数据访问封装的比较不错,再加上他的缓存机制 ...
- 调用MYSQL存储过程实例
PHP调用MYSQL存储过程实例 http://blog.csdn.net/ewing333/article/details/5906887 http://www.cnblogs.com/kkchen ...
- Oracle存储过程,游标使用
Oracle存储过程: 语法: CREATE [OR REPLACE] PROCEDURE procedure_name (arg1 [mode1] datatype1,arg2 [mode2] da ...
- [转]Oracle 调用存储过程并显示结果集 Oracle.DataAccess.Client OracleDbType.RefCursor
本文转自:http://liye9801.blog.163.com/blog/static/6019703200901244448950/ 今天学习了一个Oracle中的存储过程,一开始便被如果返回结 ...
随机推荐
- unity3d 在UGUI中制作自适应调整大小的滚动布局控件
http://blog.csdn.net/rcfalcon/article/details/43459387 在游戏中,我们很多地方需要用到scroll content的概念:我们需要一个容器,能够指 ...
- Bloomberg Desktop Api 关于历史Tick数据的一些参考
使用WAPI命令可以看到当前BBG的Api情况. 目前2016年3月是V3的版本.其中有一个API Develper's Guide 中有Core Develper Guide的pdf, 里面提到了B ...
- 如何实现一个无边框Form的移动和改变大小(二)
接着上文:这里写链接内容 我们来说说一个比较复杂的实现, 效果如图: 注意为了能够凸显没有NC(NotClient)区域,我们额外用了3个panel分别放在窗体的左右和下部.用来模拟客户自己的控件. ...
- atcoder057D(组合数模板)
题目链接:http://abc057.contest.atcoder.jp/tasks/abc057_d 题意:给出n个数,可以选择x~y个数,使其平均值最大,求其最大平均数以及选择方案数. 思路:只 ...
- [Xcode 实际操作]三、视图控制器-(1)使用UIScrollView展示多个视图可控制器
目录:[Swift]Xcode实际操作 本文将演示使用滚动视图创建多个页面. [Create a new Xcode project]->[Single View App]->[Next] ...
- dosbox让DOSBox启动后自动执行命令——自动挂载
学习汇编时. 每次启动DOSBox后,都要挂载.转盘符,于是有一个骚套路. 找到这个:bat文件 用记事本就可以编辑. 拉到最下面,找到[autoexec]部分,补充命令如下: mount c f: ...
- 搭建Keepalived + Nginx + Tomcat的高可用负载均衡架构
1 概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最简单的部署方式,但是随着业务的不断扩大,系统的访问量逐渐的上升,单机部署的模式已无法承载现有的业务量 ...
- E: 软件包 ffmpeg 没有可供安装的候选者
问题:在DSO安装依赖项ffmpeg时遇到“E: 软件包 ffmpeg 没有可供安装的候选者”这一问题. 解决:在Ubuntu上gstreamer0.10-ffmpeg属于额外的版权受限程序,gstr ...
- Spring的ioc(DI)复习概念和原理简介
IOC的好处 ioc或者说di的概念很显然了,反转控制和依赖注入,那本来直接new就行的东西,为什么要搞这么复杂呢?? 开发维护方便,高层设计不用依赖底层的,不然底层一个类改下构造器,高层就全要改,因 ...
- 118 Pascal's Triangle 帕斯卡三角形 杨辉三角形
给定 numRows, 生成帕斯卡三角形的前 numRows 行.例如, 给定 numRows = 5,返回[ [1], [1,1], [1,2,1], [1,3,3,1], [1 ...