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中的存储过程,一开始便被如果返回结 ...
随机推荐
- MFC对话框程序 屏蔽ESC和ENTER键关闭对话框的方法
http://blog.csdn.net/xgx198831/article/details/6713651 MFC对话框程序 屏蔽ESC和ENTER键关闭对话框的方法 或许还有其它更好的办法,但下 ...
- MFC CMap整理
映射表类(CMap)是MFC集合类中的一个模板类,也称作为“字典”.CMap是把唯一关键码映射到值的字典收集类,使用CMap可以构造一个关键字和元素值映射的集合类.一旦在映射中插入了一个关键码值对(元 ...
- 打包时,指定war包的名称
在pom.xml中修改finalName节点的值即可,如下: <build> <plugins> <plugin> <groupId>org.sprin ...
- css 3d旋转
- Untiy一些方法前特殊标签记录
[ExecuteInEditMode] // Make code live-update even when not in play mode [ContextMenu("Execute&q ...
- [3dmax教程] 人物+骨骼+蒙皮+动画教程
人物+骨骼+蒙皮+动画完整教程选准备好一个人,做人的方法我在这里就不做了,大家可以学都用poser来做一个. 在大腿里建立4根骨骼! 在前视图中移动如图所示位置! 做一段简单的骨骼向前伸的动画,做4 ...
- P5136 sequence(矩阵快速幂)
传送门 数列的特征方程和特征根老师上课好像讲过然而我没听--以后老师上数学课要认真听了QAQ 设\(x=\frac{1+\sqrt{5}}{2},y=\frac{1-\sqrt{5}}{2}\),那么 ...
- 关于log
如果项目上过线的话,那你一定知道Log是多么重要. 为什么说Log重要呢?因为上线项目不允许你调试,你只能通过Log来分析问题.这时打一手好Log的重要性绝不亚于写一手好代码.项目出问题时,你要能拿出 ...
- Python-2-序列及通用序列操作
序列包括字符串,列表,元祖,序列中的每个元素都有编号,其中只有元祖不能修改 通用序列操作包括索引. 切片. 相加. 相乘和成员资格检查 索引 >>> greeting = ' ...
- [題解]luogu_P3205/BZOJ_1996 合唱隊
前言:基本上發題解的都是抄的題解所以 來源:題解 题目描述 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共N个人,第i个 ...