---------------------------------------------------
---需求:查找ETL依赖关系
---描述:根据作业ID,查找上游依赖的作业ID
---依赖表结构:TBL_METADATA_RELATION:
               --id int
               --sourceid varchar2
               --targetid varchar2
--原理:对树结构进行深度遍历,使用栈的保存中间结果
--------------------------------------------------
SET serveroutput ON;
--创建类型
create or replace type id_list_table is table of varchar2(36);
/
--创建函数
drop function  p_search_source; 
CREATE OR REPLACE  function p_search_source( id  VARCHAR2) 
return id_list_table
IS
    v_table_temp id_list_table;
    v_table_stack id_list_table;
    v_table_source id_list_table; 
    i int;
    j int;
 BEGIN 
  v_table_temp:=id_list_table();
  v_table_stack:=id_list_table();
  v_table_source:=id_list_table();
  
  select SOURCE_ID bulk collect into v_table_temp from idata.TBL_METADATA_RELATION where target_id=id;
  v_table_stack:=v_table_temp;
  i:=v_table_stack.count;
  dbe_output.print_line('[info] start i='|| i );
  dbe_output.print_line('[info] v_table_stack count:'|| v_table_stack.count );
  
  if v_table_stack.count<>0
  then

while i>0 loop
       
       dbe_output.print_line('[info] '|| v_table_stack(i) ||' add to v_table_source');
       v_table_source.extend(1);
       v_table_source(v_table_source.count):=v_table_stack(i);
       --初始化为空数据集
       v_table_temp:=id_list_table();
       select SOURCE_ID bulk collect into v_table_temp from idata.TBL_METADATA_RELATION where target_id=v_table_stack(i);

--栈顶元素出栈
       v_table_stack.trim;
       j:=v_table_temp.count;
       while j>0 loop
          v_table_stack.extend(1);
          v_table_stack(v_table_stack.count):=v_table_temp(j);

j:=j-1;
       end loop; 
      i:=v_table_stack.count;    
      dbe_output.print_line('[info] v_table_source.count='||v_table_source.count );
    end loop;
  end if;
   return v_table_source;
END;
/
--执行
select COLUMN_VALUE as sources from table(cast(p_search_source('d6531654-f6ed-46dd-ac81-4efd9bf4afa4') as id_list_table ));

[postgresql]postgresql自定义函数查询ETL作业依赖的实例相关推荐

  1. postgresql中自定义函数脚本的备份及恢复

    [转自 housonglin1213 的博客]http://blog.csdn.net/housonglin1213/article/details/51005540 1.自定义函数脚本备份 CREA ...

  2. 查看oracle自定义函数,Oracle自定义函数查询数据字典项

    /****************************** 假设存储数据字典表名:data_dict_entry 表结构如下: create table data_dict_entry ( DIC ...

  3. oracle自定义函数获取省份,oracle自定义函数查询数据字典项

    /****************************** 假设存储数据字典表名:data_dict_entry 表结构如下: create table data_dict_entry ( DIC ...

  4. PostgreSQL · 实现分析 · PostgreSQL 10.0 并行查询和外部表的结合

    前言 大家都知道,PostgreSQL 近几大版本中加入了很多 OLAP 相关特性.9.6 的并行扫描应该算最大的相关特性.在今年发布的 10.0 中,并行扫描也在不断加强,新增了并行的索引扫描. 我 ...

  5. MySQL自定义函数(CREATE FUNCTION)

    在使用 MySQL 的过程中,MySQL 自带的函数可能完成不了我们的业务需求,这时候就需要自定义函数. 自定义函数是一种与存储过程十分相似的过程式数据库对象.它与存储过程一样,都是由 SQL 语句和 ...

  6. rds支持mysql自带函数吗_MySQL自定义函数(CREATE FUNCTION)

    在使用MySQL的过程中,MySQL 自带的函数可能完成不了我们的业务需求,这时候就需要自定义函数.自定义函数是一种与存储过程十分相似的过程式数据库对象.它与存储过程一样,都是由 SQL 语句和过程式 ...

  7. MySQL如何自定义函数

    在使用 MySQL 的过程中,MySQL 自带的函数可能完成不了我们的业务需求,这时候就需要自定义函数. 自定义函数是一种与存储过程十分相似的过程式数据库对象.它与存储过程一样,都是由 SQL 语句和 ...

  8. mysql自定义函数 PHP_MySQL自定义函数(CREATE FUNCTION)

    在使用 MySQL 的过程中,MySQL 自带的函数可能完成不了我们的业务需求,这时候就需要自定义函数. 自定义函数是一种与存储过程十分相似的过程式数据库对象.它与存储过程一样,都是由 SQL 语句和 ...

  9. 《手把手陪您学Python》26——自定义函数

    在上一篇<手把手陪您学Python>25--列表推导式中,我们学习了推导式的相关概念和使用方法,使用推导式的方法,可以减少代码的输入量.提高可读性,是Python中非常受欢迎的一种形式. ...

最新文章

  1. 直线电机原理动画_每周一品 · 直线电机(Linear Motor)中的磁性材料
  2. redis java根据value排序_Redis高级特性——排序
  3. DevCon.exe (DevCon Command Line Utility)
  4. Android 使用imageLoader来加载显示图片
  5. 手机MODEM 开发(30)--- VoLTE无线功能
  6. Laravel 安装mysql、表增加模拟数据、生成控制器
  7. SQL Server 2012 完全安装
  8. jQuery开发之windows边栏小工具开发(Gadget development)- wi...
  9. COM 组件编程--VC知识库读杨老师文章笔记
  10. Java中级面试题及答案(120道Java中级面试题大汇总)
  11. 使用python实现excel常用功能
  12. 安卓火狐浏览器wifi远程调试没有扫描二维码应用的问题
  13. java 小技巧_成为JAVA高手的25个小窍门
  14. 大恒相机连续采集并保存图片
  15. Flixel横板游戏制作教程(十一)—JetPack(飞行背包)
  16. 百度api英文验证码
  17. Python3_函数相关基础知识
  18. lisp+等高线点线矛盾检查_基于AutoCAD平台地形图高程点与等高线点线矛盾检测方法研究与实现...
  19. Snapde和Excel、PowerPivot、WPS打开超大CSV文件性能比较
  20. c语言 long long %d,定义一个long long类型,用%d打印的结果

热门文章

  1. 总结(5)--- Numpy和Pandas库常用函数
  2. Rancher Labs联手NeuVector,提供容器管理与安全解决方案
  3. K linux 部署手机 centos6.5
  4. 弹性升级诀窍分享:让双11来的更猛烈些吧
  5. struts2从form取值的三种方式
  6. Winfrom打印表单
  7. 日记 [2007年03月10日]重回blog,开始2007
  8. 全国重要城市DNS列表
  9. 总结《An Introduction to Ray Tracing》
  10. 问题十一:用条件编译(#if…#endif)避免 main函数中测试代码在测试完成后就删除