首页 > 数据库 >Oracle 获取某个包依赖的所有对象包括其子对象

Oracle 获取某个包依赖的所有对象包括其子对象

时间:2024-04-07 14:46:32浏览次数:23  
标签:count referenced name level 对象 dd 其子 Oracle loop

 Demo

 

  
 ---创建表 
  create table  cux_common_imports_temp(
    attribute1  varchar2(2000),
    attribute2  varchar2(2000)
  );


  



  declare
    -- 获取相应的 某个程序包 所需要应用的包
    cursor p_cur(p_name varchar2) is
      select dd.name, dd.type, dd.referenced_name, dd.referenced_type
        from dba_dependencies dd
       where 1 = 1
         and dd.referenced_type in
             ('PACKAGE', 'SYNONYM', 'TABLE', 'SEQUENCE')
         and dd.type in ('PACKAGE', 'PACKAGE BODY')
         AND dd.name = p_name;
  
    cursor p_temp(l_level number) is
      select attribute1, attribute2
        from cux_common_imports_temp
       where attribute2 = l_level;
  
    p_root_name varchar2(30);
    p_level     number := 0;
    p_count     number := 0;
  
  begin
    --将根节点 放入到表中
    p_root_name := 'CUX_COMMON_PUB';
    insert into cux_common_imports_temp
      (attribute1, attribute2)
    values
      (p_root_name, p_level);
    p_count := 1;
    --循环这一层的 节点 并获得其子节点
  
    while p_count != 0 loop
    
      for p_loop in p_temp(p_level) loop
        --下一层
        p_level     := p_level + 1;
        p_root_name := p_loop.attribute1;
        for p_rec in p_cur(p_root_name) loop
          if p_rec.referenced_type = 'PACKAGE' then
            --如果表内 没有这个程序就 加入到 临时表中
            select count(*)
              into p_count
              from cux_common_imports_temp
             where attribute1 = p_rec.referenced_name;
          
            if p_count = 0 then
              insert into cux_common_imports_temp
                (attribute1, attribute2)
              values
                (p_rec.referenced_name, p_level);
            end if;
            --输出相应的 子节点信息
            dbms_output.put_line(p_level || '-Name:' ||
                                 p_rec.referenced_name || '-Type:' ||
                                 p_rec.referenced_type);
          
          end if;
        end loop;
      end loop;
      --获取 该层是否为空
      select count(*)
        into p_count
        from cux_common_imports_temp
       where attribute2 = p_level;
    
    end loop;
  
  end;

 

标签:count,referenced,name,level,对象,dd,其子,Oracle,loop
From: https://www.cnblogs.com/ivenlin/p/18118999

相关文章

  • 在使用set添加对象的时候,重写了hashcode方法后,为什么equals返回的仍是false,如何理解ha
    /**1.对象的哈希码值和内存地址值不是一回事;*2.如果自定义类不复写Object类中的equals方法,那么equals比较的就是两个对象的内存地址值。*//***下面证明了hash值和内存地址的关系*一、当没有重写hashCode()方法的时候,*S......
  • WinDbg实操一(查看.net对象)
    查看.net对象测试代码usingSystem;usingSystem.Collections.Generic;namespaceDemo1_ObjectGc{internalclassProgram{privatestaticList_values=newList();staticvoidMain(string[]args){for(inti=0;i<10000;i++){_values.Add(newA(......
  • Python学习(八):python面向对象编程
    文章目录python面向对象编程类的定义类的实例化类的静态变量与静态方法类的静态变量类的静态方法@staticmethod类的类方法@classmethod类的继承单继承多继承多层继承类方法的重写类方法的重载调用父类的方法super函数python面向对象编程面向对象(ObjectOriented)......
  • copier:万能的对象拷贝偷懒神器
    copier:万能的对象拷贝偷懒神器原创 golang学习记 golang学习记 2024-04-0710:29 四川 听全文如果你干什么事都专注一点那么你就会超过80%的人如果你在一个点上坚持5年那么你进入10%都有可能 我见过的最美的一天是你穿过人群找到我的那一天 g......
  • JVM—对象的创建流程与内存分配
    JVM—对象的创建流程与内存分配创建流程对象创建的流程图如下:对象的内存分配方式内存分配的方式有两种:指针碰撞(BumpthePointer)空闲列表(FreeList)分配方式说明收集器指针碰撞(BumpthePointer)内存地址是连续的(新生代)Serial和ParNew收集器空闲列表(FreeL......
  • python面向对象(二)继承:最直接的代码复用
    继承简介继承是指通过在创建类时提供另一个类(称为父类)的名称,来获取父类的属性与方法。继承最明显的作用就是节约代码量,不需要重复定义已经存在的属性与方法。但是深入思考就会发现,复用只是继承的附带作用,继承最有意义的一点,是将不同的类联系了起来,让不同的类之间能够有一定的共性......
  • Oracle之DBMS_LOCK包用法详解
    概述与背景某些并发程序,在高并发的情况下,必须控制好并发请求的运行时间和次序,来保证处理数据的正确性和完整性。对于并发请求的并发控制,EBS系统可以通过ConcurrentProgram定义界面的Incompatibilities功能配置实现。但是Incompatibilities功能存在其局限性,它只能把整个并发请求......
  • 类对象做类成员
    `#includeusingnamespacestd;includeclassPhone{public:Phone(stringpName){ m_PName=pName;}stringm_PName;};classPerson{public:Person(stringname,stringpName):m_Name(name),m_Phone(pName){}stringm_Name;Phonem_Phone;};voidtest......
  • JAVA入门——对象数组:对象数组进行增删改查
    题目:不使用数据库,定义长度为3的数组,存储1~3名学生对象作为初始值(即1名2名3名都可以),学生对象的学号具有唯一性。学生属性:学号,姓名,年龄。要求一:再添加一个学生对象,遍历所有学生要求二:通过学号删除学生信息,遍历所有学生要求三:通过学号查询学生信息,若存在则修改年龄,遍历所有......
  • C++从入门到精通——初步认识面向对象及类的引入
    初步认识面向对象及类的引入前言一、面向过程和面向对象初步认识C语言C++二、类的引入C++的类名代表什么示例C++与C语言的struct的比较成员函数访问权限继承默认构造函数默认成员初始化结构体大小总结前言面向过程注重任务的流程和控制,适合简单任务和流程固定的......