PLSQL 学习之路(3)递归查询返回属性结构

1.FUNCTION

FUNCTION query_all(v_org_id NUMBER) RETURN pl_json IS

v_orglist                pl_json := pl_json;

v_temp                   pl_json := pl_json;

v_total                  NUMBER := 0;

v_parentorganizationname VARCHAR2(100);

--获取org_id这个组织的基本信息并拼字符串

CURSOR v_qur_cur IS

SELECT *

FROM dfnd.dfnd_organizations do

WHERE do.organization_id = v_org_id;

--获取org_id这个组织下面的子组织数组

CURSOR v_qurall_cur IS

SELECT *

FROM dfnd.dfnd_organizations do

WHERE do.parent_organization_id = v_org_id

order by do.order_num;

BEGIN

FOR v_qur IN v_qur_cur LOOP

v_orglist.set_value(‘organizationId‘, v_qur.organization_id);

v_orglist.set_value(‘organizationCode‘, v_qur.organization_code);

v_orglist.set_value(‘organizationName‘, v_qur.organization_name);

v_orglist.set_value(‘parentOrganizationId‘,

v_qur.parent_organization_id);

v_orglist.set_value(‘organizationManager‘, ‘11‘);

IF v_qur.parent_organization_id IS NOT NULL THEN

SELECT do1.organization_name

INTO v_parentorganizationname

FROM dfnd.dfnd_organizations do1

WHERE do1.organization_id = v_qur.parent_organization_id;

v_orglist.set_value(‘parentOrganizationName‘,

v_parentorganizationname);

END IF;

END LOOP;

FOR v_qurall IN v_qurall_cur LOOP

v_total := v_total + 1;

IF (v_total >= 1) THEN

v_temp := query_all(v_qurall.organization_id);

v_orglist.add_list_item(‘childOrganizations‘, v_temp);

END IF;

END LOOP;

RETURN v_orglist;

END query_all;



2.PROCEDURE

PROCEDURE proc_query_all_organizations(p_request  CLOB,

x_response OUT CLOB) IS

v_api      VARCHAR2(100) := ‘proc_query_all_organizations‘;

v_response pl_json := pl_json;

v_temp     pl_json;

v_orglist  pl_json := pl_json;

v_org_id   NUMBER;

BEGIN

SELECT do.organization_id

INTO v_org_id

FROM dfnd.dfnd_organizations do

WHERE do.parent_organization_id IS NULL;

v_temp := query_all(v_org_id);

v_orglist.set_value(‘orgList‘, v_temp);

x_response := v_orglist.to_json;

EXCEPTION

WHEN OTHERS THEN

ROLLBACK;

v_response.fail(‘接口‘ || v_api || ‘发生错误,错误原因:‘ || SQLERRM);

x_response := v_response.to_json;

END proc_query_all_organizations;

时间: 2024-08-01 16:05:11

PLSQL 学习之路(3)递归查询返回属性结构的相关文章

WPF学习之路(三) 属性与依赖

类型是DependencyProperty的属性是依赖属性 依赖属性不同于普通的.Net属性,类似于一个计算过程,根据依赖的值得到最终值. 为什么引入依赖属性: MSDN原文 One of the primary architectural philosophies used in building WPF was a preference for properties over methods or events. WPF的设计思想是侧重属性胜于方法和事件. 实例 依赖属性对资源引用的支持 设

PLSQL 学习之路(2)分页查询

PROCEDURE proc_query_organization_emps(p_request  CLOB, x_response OUT CLOB) IS v_api             VARCHAR2(100) := 'proc_query_organization_emps'; v_request         json; v_response        pl_json := pl_json; v_organization_id NUMBER; v_page         

[原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

jQuery 入门学习之路(3)

我是菜鸟初学者,分享一下自己学习之路. 一:属性 1)属性 1.attr 两个参数,获取的一个是属性,一个是属性的值. 补充:[在console.log();控制台括号内(“这里面是什么控制台就显示什么”),(不带引号的话可能显示的是其他的东西)] attr可以赋予多个,如下图所示: 补充:关于页面function()的理解,最外层的那个[$(function(){......});]就好比一个景区的入区门票,只有拥有了这个门票,你才能进去景区,开始游览.但是景区内还有特别景点需要买门票[$("

类与对象的学习之路

---恢复内容开始--- 学习java也有一段时间了,这周踏上了类与对象的学习之路,回过头来总结一下类与对象的基本知识.之前在大一上就接触了Python语言跟C语言,现在开始学习java语言了.我觉得跟之前学的C语言还是有区别的,至于在java书中提及的C++没学习,听别人说C++跟java有点像,这两种编程语言都是面向对象的,并且编程语言本身之间都有很多相似相同的地方. 一.说说类与对象 说到面向对象,那么不得不提的就是类和对象了.Java代码是以类为单位的.在我看来,类就是一个模板,比如一个

python学习之路------time 模块

最近正在学习python,觉得这款语言比较容易上手,但一些基础还是要靠点滴积累的,因此想写一些博文来记录我的学习之路. 首先要了解这个模块,在Idle中键入help(),再键入time,就可以得到关于time模块的相关信息了.返回了一大堆英文,对于我们这些英文不好的渣渣,只能上网求助翻译,翻译太长就不贴了. 说几个我认为有用的. time模块表示时间的方式主要有三个: 时间戳 :时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量 2.格式化的字符串str 3.元祖struct

OpenGL学习之路(四)

1 引子 上次读书笔记主要是学习了应用三维坐标变换矩阵对二维的图形进行变换,并附带介绍了GLSL语言的编译.链接相关的知识,之后介绍了GLSL中变量的修饰符,着重介绍了uniform修饰符,来向着色器程序传入输入参数. 这次读书笔记的内容相对有趣一些,主要是和园友们分享讨论三维坐标变换矩阵在三维几何体上的应用,以及介绍一下如何实现三维图形与用户操作的交互.这一次笔记在三维编程中也是非常重要的——我们最后开发的三维程序最终就是要和目标用户进行交互的. 之前一直没有在博客上放过gif格式的动画图片,

[原创]java WEB学习笔记6:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

.NET学习之路----我对P/Invoke技术的理解(一)

看了P/Invoke技术的介绍,于是想写下点东西,东西包含两个部分:知识的纪录和我的理解及疑问. r托管代码中调用非托管API函数的过程 1.定位包含API的DLL: 2.载入DLL 3.找到DLL中想要的那个API,然后把参数压入栈中.排列数据(排列数据是什么意思?数据封送) 4.把执行权限从托管代码中转移到非托管代码中() 对Dll中的函数进行一些说明,以能调用 DllImport特性来说明函数,有一些特殊的作用,比如换掉API的原来名字,见DLLImport特性. 非托管函数和托管方法中数