ORACLE 获取json 格式

110 阅读1分钟

1、 image.png 2、

CREATE OR REPLACE FUNCTION           "FUN_GET_TARGET_JSON_FIELD_ZJ" (p_xmlx VARCHAR2, p_xlx VARCHAR2, p_xzqhdm VARCHAR2,p_year varchar2)
RETURN VARCHAR2 is
--项目类型(国省道建设,国省道养护,农村公路)
v_xmlx varchar2(50):='';
--BZ 里面的json的 type 字段
v_xlx varchar2(50):='';
--行政区划代码
v_xzqhdm varchar2(50):='';
--年份
v_year varchar2(4):='';
--计数,判断项目类型p_xmlx 和 小类型p_xlx 传值是一样的情况,则直接获取表里面的MBZJ
v_count INTEGER:=0;
--返回值
v_return varchar2(50):='';
BEGIN
	--赋值区域
	v_xmlx:=p_xmlx;
	v_xlx:=p_xlx;
	v_xzqhdm:=p_xzqhdm;
	v_year:=p_year;
	
-- 判断如果是行政区划没有选,默认传递的是全省
IF v_xzqhdm='360000' THEN 
	--判断项目类型是不是传递的全部,即项目类型和小类型 传递是一样的
	IF v_xmlx=v_xlx THEN 
		--则直接取ELT_NDTZMB 表里面各个地市汇总的和
		select sum(mbzj) into v_return from ELT_NDTZMB t where t.xmlx=v_xmlx and year=v_year ;	
		--返回出去
		return v_return;
	END IF;
	--判断项目类型是不是传递的全部,即项目类型和小类型 传递是不一样的
	IF v_xmlx!=v_xlx THEN 
		-- 则取BZ里面的json里面配置项的zj 字段
		select sum((select wm_concat(DISTINCT zj) from json_table(bz,	'$.config[*]' columns	type   varchar(50) path '$.type',	zj  varchar(50) path '$.zj',	lc  varchar(50) path '$.lc'	) t	where 1=1 and type=v_xlx )) into v_return from ELT_NDTZMB t where t.xmlx=v_xmlx and year=v_year ;			
		--返回出去
		return v_return;
	END IF;
END IF;
IF v_xzqhdm!='360000' THEN 

	IF v_xmlx=v_xlx THEN 
		--则直接取ELT_NDTZMB 表里面各个地市汇总的和
		select sum(mbzj) into v_return from ELT_NDTZMB t where t.xmlx=v_xmlx and year=v_year and xzqhdm=v_xzqhdm;	
		--返回出去
		return v_return;
	END IF;
	--判断项目类型是不是传递的全部,即项目类型和小类型 传递是不一样的
	IF v_xmlx!=v_xlx THEN 
		-- 则取BZ里面的json里面配置项的zj 字段
		select sum((select wm_concat(DISTINCT zj) from json_table(bz,	'$.config[*]' columns	type   varchar(50) path '$.type',	zj  varchar(50) path '$.zj',	lc  varchar(50) path '$.lc'	) t	where 1=1 and type=v_xlx )) into v_return from ELT_NDTZMB t where t.xmlx=v_xmlx and year=v_year and xzqhdm=v_xzqhdm ;			
		--返回出去
		return v_return;
	END IF;
END IF;

END;

3、查询

select  FUN_GET_TARGET_JSON_FIELD_ZJ('国省道建设','国省道建设','360100','2022') from  dual