PLSQL 过程之间的调用 (实现递归删除目录功能)

在使用PLSQL 编程中需要用到一些递归的操作,这里使用plsql实现递归删除目录 。和大家分享一下。

 --=======================删除
  PROCEDURE DEL_POWER(P_ID INTEGER) IS
  BEGIN
    UPDATE EX_SYS_POWER A SET A.YXBZ = 0 WHERE A.ID = P_ID;
    DEL_CHILDREN_POWER(P_ID);
    --处理异常
  EXCEPTION
    WHEN OTHERS THEN
      ROLLBACK;
  END;
  --====================删除子节点
  PROCEDURE DEL_CHILDREN_POWER(FUNCTION_ID INTEGER) IS
    IDCOUNT    INTEGER;
    ITEM_COUNT INTEGER;
  BEGIN
    FOR ITEM IN (SELECT ID FROM EX_SYS_POWER WHERE PARENT_ID = FUNCTION_ID) LOOP
      SELECT COUNT(*)
        INTO IDCOUNT
        FROM EX_SYS_POWER
       WHERE PARENT_ID = ITEM.ID;
      IF IDCOUNT > 0 THEN
        DEL_POWER(ITEM.ID);
      END IF;
      IF IDCOUNT = 0 THEN
        UPDATE EX_SYS_POWER A SET A.YXBZ = 0 WHERE ID = ITEM.ID;
        ITEM_COUNT := ITEM_COUNT + 1;
      END IF;
    END LOOP;
    COMMIT;
  END;

这个功能我想用函数也能够实现,但是尝试了几次,在游标遍历的时候老是出错,哎所以还是都用过程了。有兴趣的童鞋可以把使用函数实现递归的方法贴在下面,让我学学咯

时间: 2025-01-12 01:35:43

PLSQL 过程之间的调用 (实现递归删除目录功能)的相关文章

函数递归调用过程中的调用堆栈的情况

为了加深对函数递归调用过程中的理解,本Demo程序特意在VS2008 C#控制台程序实现了阶乘的计算功能,用于观察函数递归调用过程中的调用堆栈的情况. 源码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace RecursiveTset { class Program { //阶乘的定义:n!=n*(n-1)!,特别的,1!=1:0!=1 //阶乘的实

分布式系统的那些事儿(三) - 系统与系统之间的调用

系统与系统之间的调用通俗来讲,分为本地同一台服务器上的服务相互调用与远程服务调用,这个都可以称之为RPC通信.浅白点讲,客户访问服务器A,此时服务器要完成某个动作必须访问服务器B,服务器A与B互相通信,相互调用,A访问B的时候,A挂起,等待B的响应,B响应返回相应的数据个A,A再返回给用户,这就是一个很简单的栗子. 举个常见栗子,用户上传图片,用户上传图片首先会经过自身的服务器,然后再对图片进行处理,此时图片处理放在图片服务器中进行,那么我们只需要调用图片服务器提供的接口即可,然后等待响应返回的

又拍云递归删除目录及文件

偶然翻看了一下又拍云存储的api文档,发现无法删除非空目录,简单写了一个,使用Yii框架,所以可能看起来有点怪,见谅吧. 1 <?php 2 3 /** 4 * 文件说明. 5 * 6 * @author Kun Xu <[email protected]> 7 */ 8 class UpyunController extends Controller 9 { 10 11 /** 12 * 删除文件夹及文件,递归删除目录及文件. 13 */ 14 public function acti

10. JavaSE-子类实例化过程 & 构造方法间调用

子类的实例化过程: 子类中所有的构造函数默认都会访问父类中空参数的构造函数. class Parent { Parent(){ System.out.println("parent class run"); } } class Children extends Parent { Children(){ //super();//调用的就是父类空参数的构造函数 System.out.println("children class run"); //return; /*说

服务之间的调用为啥不直接用 HTTP 而用 RPC?

什么是 RPC?RPC原理是什么? 什么是 RPC? RPC(Remote Procedure Call)-远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.比如两个不同的服务 A.B 部署在两台不同的机器上,那么服务 A 如果想要调用服务 B 中的某个方法该怎么办呢?使用 HTTP请求 当然可以,但是可能会比较慢而且一些优化做的并不好. RPC 的出现就是为了解决这个问题. RPC原理是什么? 服务消费方(client)调用以本地调用方式调用服务: cl

经测试稳定可用的蓝牙链接通信Demo,记录过程中遇到的问题的思考和解决办法,并整理后给出一个Utils类可以简单调用来实现蓝牙功能

说明:这是本人在蓝牙开发过程中遇到过的问题记录和分析,以及解决办法. 在研究过程中,许多的前人给出的解决方案和思路指导对我相当有帮助,但并非都是可采取的解决方法, 经过本人对这些方法的测试和使用过后,给出自己的理解和解决方案,不一定是正确的,但这些方法的确可以解决问题. 如果有人遇到同样的问题,并且看到我的文章解决,那是我的荣幸. !!!!!!但特别需要说明的是,看的越多,不明白的越多,我的看法可能是完全错误的,这些方法只是暂时解决了我的问题, !!!!!!如果有人发现了我的错误,请私信或评论告

JAVA 构造方法之间的调用

this:看上去,用来区分局部变量和成员变量的情况this:就是代表本类对象,this代表它所在方法所属对象的引用构造方法之间的调用只能通过this语句来完成构造方法之间进行调用时this语句只能出现在第一行,构造方法要先执行,如果初始化当中还有初始化,那就去执行更细节的初始化 class G{ private String name; private int age = 19; G(String name){ System.out.println(name); System.out.print

Iframe父页面与子页面之间的调用

专业词语解释如下:     Iframe:iframe元素是文档中的文档.     window对象: 浏览器会在其打开一个HTML文档时创建一个对应的window对象.但是,如果一个文档定义了一个或者多个框架(即:包含一个或者多个frame或者iframe标签),浏览器就会为原始文档创建一个window对象,再为每个iframe创建额外的window对象,这些额外的window对象是原始窗口的子窗口. contentWindow: 是指指定的iframe或者iframe所在的window对象.

PHP 递归删除目录中文件

/** * 递归删除目录中文件 * @param $pathname * @return bool */public static function delDir($pathname)//要删除的目录{ if(file_exists($pathname)) { if(is_file($pathname)) { unlink($pathname); } else { $dir = opendir($pathname); while($filename = readdir($dir)) { if($