如何将视图与存储过程里的逻辑合并
公司使用ORM,且强制所有的数据都必须以表或视图的方式获取.本人现在遇到个问题,视图代码如下:
DROP VIEW CHGT.V_PHJG_INFO_JKSJY;CREATE OR REPLACE VIEW CHGT.V_PHJG_INFO_JKSJYAS ( /* 监控数据源 项目名称:XMMC, 申请用地单位名称:SQRMC, 法人:FRDBXM, 法人办公电话:FRDBDHHM, 法人移动电话: 单位地址:TXDZ, 联系人电话:LXDH, 电子邮件:EMAIL, 邮政编码:YZBM 合同ID或决定书ID:ID, 合同或决定书编号:HTBH, 电子监管号:DZJGH, 批准书文号: PZSWH, 供应方式:GDYWLX 坐落:TDZL, 行政区域:XZQY, 供地面积:GDMJ, 金额:JE, 签定日期:QDRQ 约定交地时间:YDJDSJ, 约定开工时间:YDKGSJ, 约定竣工时间:YDJGSJ 变更交地时间:BGJDSJ, 变更开工时间:BGKGSJ, 变更竣工时间:BGJGSJ 实际交地时间:SJJDSJ, 实际开工时间:SJKGSJ, 实际竣工时间:SJJGSJ 复核验收时间:FHYSSJ 容积率最小值:RJLZXZ 容积率最大值:RJLZDZ 绿化率最小值:LHLZXZ 绿化率最大值:LHLZDZ 建筑密度最小值:JZMDZXZ 建筑密度最大值:JZMDZDZ 约定开发投资额:YDKFTZE 投资强度:TZQD 建筑总面积:JZZMJ 建筑限高最小值:JZXGZXZ 建筑限高最大值:JZXGZDZ 土地用途:TDYTBM 当前阶段:DQJD 是否疑似:SFYS 疑似类别:YSLB */ --第一层 SELECT 项目名称 xmmc, 申请用地单位名称 SQRMC, 法人 FRDBXM, 法人办公电话 FRDBDHHM, 法人移动电话 SJHM, 单位地址 TXDZ, 联系人电话 LXDH, 电子邮件 EMAIL, 邮政编码 YZBM, 合同ID ID, 编号 HTBH, 电子监管号 DZJGH, 批准书文号 PZSWH, CASE WHEN 供应方式 IS NULL THEN '国有土地公开出让' WHEN 供应方式 = '1' THEN '国有土地公开出让' WHEN 供应方式 = '2' THEN '国有土地协议出让' WHEN 供应方式 = '3' THEN '国有土地划拨' END GDYWLX, 坐落 TDZL, 行政区域 XZQY, 供地面积 CRMJ, 金额 CRJE, 签订日期 HTQDRQ, 约定交地时间 YDJDSJ, 约定开工时间 YDKGSJ, 约定竣工时间 YDJGSJ, BGJDSJ, BGKGSJ, BGJGSJ, SJJDSJ, SJKGSJ, SJJGSJ, FHYSSJ, 容积率最小值 RJLZXZ, 容积率最大值 RJLZDZ, 绿化率最小值 LHLZXZ, 绿化率最大值 LHLZDZ, 建筑密度最小值 JZMDZXZ, 建筑密度最大值 JZMDZDZ, 约定开发投资额 YDKFTZE, 投资强度 TZQD, 建筑总面积 JZZMJ, 建筑限高最小值 JZXGZXZ, 建筑限高最大值 JZXGZDZ, 土地用途 TDYT, CASE WHEN SJJDSJ IS NULL THEN '交地阶段' WHEN SJKGSJ IS NULL THEN '开工阶段' WHEN SJJGSJ IS NULL THEN '建设及竣工阶段' WHEN FHYSSJ IS NULL THEN '复核验收阶段' END DQJD, NULL SFYS, NULL YSLB FROM ( --第二层 SELECT * FROM ( --第三层 SELECT xm.XMMC 项目名称, sqr.SQRMC 申请用地单位名称, sqr.FRDBXM 法人, sqr.FRDBDHHM 法人办公电话, sqr.SJHM 法人移动电话, sqr.TXDZ 单位地址, sqr.LXDH 联系人电话, sqr.EMAIL 电子邮件, sqr.YZBM 邮政编码, ht.ID 合同ID, ht.HTBH 编号, ht.DZJGH 电子监管号, pzs.PZSWH 批准书文号, gd.GDYWLX 供应方式, zd.TDZL 坐落, qy.XZQY 行政区域, zd.CRMJ 供地面积, crj.CRJE 金额, qtxx.HTQDRQ 签订日期, zd.YDJDSJ 约定交地时间, yd.YDDGSJ 约定开工时间, yd.YDJGSJ 约定竣工时间, yd.RJLZXZ 容积率最小值, yd.RJLZDZ 容积率最大值, yd.LHLZXZ 绿化率最小值, yd.LHLZDZ 绿化率最大值, yd.JZMDZXZ 建筑密度最小值, yd.JZMDZDZ 建筑密度最大值, yd.YDKFTZE 约定开发投资额, yd.TZQD 投资强度, yd.JZZMJ 建筑总面积, yd.JZXGZXZ 建筑限高最小值, yd.JZXGZDZ 建筑限高最大值, tdyt.NAME 土地用途 FROM YDGD_INFO_GDHT ht JOIN YDGL_INFO_XM xm ON xm.ID = ht.XMID JOIN BIZ_INFO_SQR sqr ON xm.dwid = sqr.ID JOIN YDGD_INFO_GDHTCRZD zd ON ht.ID = zd.GDHTID JOIN YDGD_INFO_GDHTCRJZFYD crj ON ht.ID = crj.GDHTID JOIN YDGD_INFO_GDHTQTXX qtxx ON qtxx.GDHTID = ht.ID JOIN YDGD_INFO_GDHTTDKFLYYJSYD yd ON ht.ID = yd.GDHTID LEFT JOIN ( SELECT qy.GDHTID, wmsys.wm_concat(xzqh.NAME) XZQY FROM YDGD_INFO_GDHTZDSZQY qy JOIN BIZ_DICT_XZQH xzqh ON qy.SZXZQ = xzqh.CODE GROUP BY qy.GDHTID ) qy ON qy.GDHTID = ht.ID LEFT JOIN BIZ_DICT_TDYT tdyt ON tdyt.CODE = zd.ZYTDYTBM LEFT JOIN YDGD_INFO_JSYDGD gd ON gd.GDHTID = ht.ID LEFT JOIN YDGD_INFO_JSYDPZS pzs ON gd.JSYDPZSID = pzs.ID WHERE ht.GDHTZT != -1 UNION all SELECT xm.XMMC 项目名称, sqr.SQRMC 申请用地单位名称, sqr.FRDBXM 法人, sqr.FRDBDHHM 法人办公电话, sqr.SJHM 法人移动电话, sqr.TXDZ 单位地址, sqr.LXDH 联系人电话, sqr.EMAIL 电子邮件, sqr.YZBM 邮政编码, jds.ID 合同ID, jds.HBSBH 编号, jds.DZJGH 电子监管号, pzs.PZSWH 批准书文号, gd.GDYWLX 供应方式, zd.TDZL 坐落, qy.XZQY 行政区域, zd.HBMJ 供地面积, zd.HBJ 金额, jds.QFSJ 签订日期, yd.YDJDSJ 约定交地时间, yd.KGRQ 约定开工时间, yd.JGRQ 约定竣工时间, yd.RJLZXZ 容积率最小值, yd.RJLZDZ 容积率最大值, yd.LHLZXZ 绿化率最小值, yd.LHLZDZ 绿化率最大值, yd.JZMDZXZ 建筑密度最小值, yd.JZMDZDZ 建筑密度最大值, null 约定开发投资额, null 投资强度, yd.ZJZMJ 建筑总面积, nvl(yd.DSJZXGZXZ, 0) + nvl(yd.DXJZXGZXZ, 0) 建筑限高最小值, nvl(yd.DSJZXGZDZ, 0) + nvl(yd.DXJZXGZDZ, 0) 建筑限高最大值, tdyt.NAME 土地用途 FROM YDGD_INFO_HBJDS jds JOIN YDGL_INFO_XM xm ON xm.ID = jds.XMID JOIN BIZ_INFO_SQR sqr ON xm.dwid = sqr.ID JOIN YDGD_INFO_HBJDSZDXX zd ON jds.ID = zd.HBJDSID JOIN YDGD_INFO_HBJDSTDKFLYYJSYD yd ON jds.ID = yd.HBJDSID LEFT JOIN ( SELECT qy.HBJDSID, wmsys.wm_concat(xzqh.NAME) XZQY FROM YDGD_INFO_HBJDSZDSZQY qy JOIN BIZ_DICT_XZQH xzqh ON qy.SZXZQ = xzqh.CODE GROUP BY qy.HBJDSID ) qy ON qy.HBJDSID = jds.ID LEFT JOIN BIZ_DICT_TDYT tdyt ON tdyt.CODE = zd.ZDYTBM LEFT JOIN YDGD_INFO_JSYDGD gd ON gd.HBJDSID = jds.ID LEFT JOIN YDGD_INFO_JSYDPZS pzs ON gd.JSYDPZSID = pzs.ID WHERE jds.HBJDSZT != -1 ) sjy LEFT JOIN PHJG_INFO_GDKZB kzb ON sjy.合同ID = kzb.ID WHERE sjy.供应方式 is NULL OR sjy.供应方式 IN ('1', '2', '3') ORDER BY sjy.签订日期 DESC ))
--中间变量, tmpDate DATEIF (DQJD = '交地阶段') THEN IF (YDJDSJ IS NULL AND BGJDSJ IS NULL) THEN --如果两边都没时间,则直接疑似 UPDATE tmpData SET SFYS = '是', YSLB = '疑似交地违约' WHERE NUM = curNum; ELSE --如果有变更时间,就以变更时间为准,否则以约定时间为准 IF (YDJDSJ IS NOT NULL AND BGJDSJ IS NULL) THEN tmpDate := YDJDSJ; ELSE tmpDate := BGJDSJ; END IF; --9个月为预警期 IF (add_months(tmpDate, 9) < current_date) THEN UPDATE tmpData SET SFYS = '是', YSLB = '疑似交地违约' WHERE NUM = curNum; ELSE UPDATE tmpData SET SFYS = '否', YSLB = '正常' WHERE NUM = curNum; END IF; END IF;ELSIF (DQJD = '建设及竣工阶段') THEN IF (YDJGSJ IS NULL AND BGJGSJ IS NULL) THEN --如果两边都没时间,则直接疑似 UPDATE tmpData SET SFYS = '是', YSLB = '疑似竣工违约' WHERE NUM = curNum; ELSE --如果有变更时间,就以变更时间为准,否则以约定时间为准 IF (YDJGSJ IS NOT NULL AND BGJGSJ IS NULL) THEN tmpDate := YDJGSJ; ELSE tmpDate := BGJGSJ; END IF; --9个月为预警期 IF (add_months(tmpDate, 9) < current_date) THEN UPDATE tmpData SET SFYS = '是', YSLB = '疑似竣工违约' WHERE NUM = curNum; ELSE UPDATE tmpData SET SFYS = '否', YSLB = '正常' WHERE NUM = curNum; END IF; END IF;ELSIF (DQJD = '开工阶段') THEN IF (YDKGSJ IS NULL AND BGKGSJ IS NULL) THEN --如果两边都没时间,则直接闲置 UPDATE tmpData SET SFYS = '是', YSLB = '疑似闲置' WHERE NUM = curNum; ELSE --如果有变更时间,就以变更时间为准,否则以约定时间为准 IF (YDKGSJ IS NOT NULL AND BGKGSJ IS NULL) THEN tmpDate := YDKGSJ; ELSE tmpDate := BGKGSJ; END IF; --9个月为预警期,12个月为闲置期 IF (add_months(tmpDate, 12) < current_date) THEN UPDATE tmpData SET SFYS = '是', YSLB = '疑似闲置' WHERE NUM = curNum; ELSIF (add_months(tmpDate, 9) < current_date) THEN UPDATE tmpData SET SFYS = '是', YSLB = '开工违约' WHERE NUM = curNum; ELSE UPDATE tmpData SET SFYS = '否', YSLB = '正常' WHERE NUM = curNum; END IF; END IF;ELSE UPDATE tmpData SET SFYS = '否', YSLB = '正常' WHERE NUM = curNum;END IF;
WHEN 供应方式 IS NULL THEN '国有土地公开出让'
WHEN 供应方式 = '1' THEN '国有土地公开出让'
WHEN 供应方式 = '2' THEN '国有土地协议出让'
WHEN 供应方式 = '3' THEN '国有土地划拨'
END GDYWLX,
*/
坐落 TDZL, 行政区域 XZQY, 供地面积 CRMJ, 金额 CRJE, 签订日期 HTQDRQ,
约定交地时间 YDJDSJ, 约定开工时间 YDKGSJ, 约定竣工时间 YDJGSJ,
BGJDSJ, BGKGSJ, BGJGSJ,
SJJDSJ, SJKGSJ, SJJGSJ,
FHYSSJ,
容积率最小值 RJLZXZ, 容积率最大值 RJLZDZ, 绿化率最小值 LHLZXZ, 绿化率最大值 LHLZDZ,
建筑密度最小值 JZMDZXZ, 建筑密度最大值 JZMDZDZ, 约定开发投资额 YDKFTZE, 投资强度 TZQD,
建筑总面积 JZZMJ, 建筑限高最小值 JZXGZXZ, 建筑限高最大值 JZXGZDZ, 土地用途 TDYT,
CASE
WHEN SJJDSJ IS NULL THEN '交地阶段'
WHEN SJKGSJ IS NULL THEN '开工阶段'
WHEN SJJGSJ IS NULL THEN '建设及竣工阶段'
WHEN FHYSSJ IS NULL THEN '复核验收阶段'
END DQJD,
CASE
--交地阶段
--如果两边都没时间,则直接疑似
--如果有变更时间,就以变更时间为准,否则以约定时间为准
--3个月为预警期
WHEN sjjdsj IS NULL AND 约定交地时间 IS NULL AND BGJDSJ IS NULL THEN '是'
WHEN sjjdsj IS NULL AND add_months(nvl(BGJDSJ, 约定交地时间), -3) < CURRENT_DATE THEN '是'
WHEN sjjdsj IS NULL AND add_months(nvl(BGJDSJ, 约定交地时间), -3) >= CURRENT_DATE THEN '否'
--开工阶段
WHEN sjkgsj IS NULL AND 约定开工时间 IS NULL AND BGKGSJ IS NULL THEN '是'
WHEN sjkgsj IS NULL AND add_months(nvl(BGKGSJ, 约定开工时间), 9) < CURRENT_DATE THEN '是'--闲置地为9个月
WHEN sjkgsj IS NULL AND add_months(nvl(BGKGSJ, 约定开工时间), -3) < CURRENT_DATE THEN '是'
WHEN sjkgsj IS NULL AND add_months(nvl(BGKGSJ, 约定开工时间), -3) >= CURRENT_DATE THEN '否'
--建设及竣工阶段
WHEN sjjgsj IS NULL AND 约定竣工时间 IS NULL AND BGJGSJ IS NULL THEN '是'
WHEN sjjgsj IS NULL AND add_months(nvl(BGJGSJ, 约定竣工时间), -3) < CURRENT_DATE THEN '是'
WHEN sjjgsj IS NULL AND add_months(nvl(BGJGSJ, 约定竣工时间), -3) >= CURRENT_DATE THEN '否'
END SFYS,
CASE
--交地阶段
WHEN sjjdsj IS NULL AND 约定交地时间 IS NULL AND BGJDSJ IS NULL THEN '疑似交地违约'
WHEN sjjdsj IS NULL AND add_months(nvl(BGJDSJ, 约定交地时间), -3) < CURRENT_DATE THEN '疑似交地违约'
WHEN sjjdsj IS NULL AND add_months(nvl(BGJDSJ, 约定交地时间), -3) >= CURRENT_DATE THEN '正常'
--开工阶段
WHEN sjkgsj IS NULL AND 约定开工时间 IS NULL AND BGKGSJ IS NULL THEN '疑似闲置'
WHEN sjkgsj IS NULL AND add_months(nvl(BGKGSJ, 约定开工时间), 9) < CURRENT_DATE THEN '疑似闲置'
WHEN sjkgsj IS NULL AND add_months(nvl(BGKGSJ, 约定开工时间), -3) < CURRENT_DATE THEN '疑似开工违约'
WHEN sjkgsj IS NULL AND add_months(nvl(BGKGSJ, 约定开工时间), -3) >= CURRENT_DATE THEN '正常'
--建设及竣工阶段
WHEN sjjgsj IS NULL AND 约定竣工时间 IS NULL AND BGJGSJ IS NULL THEN '疑似竣工违约'
WHEN sjjgsj IS NULL AND add_months(nvl(BGJGSJ, 约定竣工时间), -3) < CURRENT_DATE THEN '疑似竣工违约'
WHEN sjjgsj IS NULL AND add_months(nvl(BGJGSJ, 约定竣工时间), -3) >= CURRENT_DATE THEN '正常'
END YSLB
FROM
(
--第二层
SELECT * FROM
(
--第三层
SELECT
xm.XMMC 项目名称, sqr.SQRMC 申请用地单位名称, sqr.FRDBXM 法人, sqr.FRDBDHHM 法人办公电话, sqr.SJHM 法人移动电话,
sqr.TXDZ 单位地址, sqr.LXDH 联系人电话, sqr.EMAIL 电子邮件, sqr.YZBM 邮政编码,
ht.ID 主键, ht.ID 合同ID, NULL 决定书ID, ht.HTBH 编号, ht.DZJGH 电子监管号, pzs.PZSWH 批准书文号, crfs.NAME 供应方式, --gd.GDYWLX 供应方式,
zd.TDZL 坐落, qy.XZQY 行政区域, zd.CRMJ 供地面积, crj.CRJE 金额, qtxx.HTQDRQ 签订日期,
zd.YDJDSJ 约定交地时间, yd.YDDGSJ 约定开工时间, yd.YDJGSJ 约定竣工时间,
yd.RJLZXZ 容积率最小值, yd.RJLZDZ 容积率最大值, yd.LHLZXZ 绿化率最小值, yd.LHLZDZ 绿化率最大值,
yd.JZMDZXZ 建筑密度最小值, yd.JZMDZDZ 建筑密度最大值, yd.YDKFTZE 约定开发投资额, yd.TZQD 投资强度,
yd.JZZMJ 建筑总面积, yd.JZXGZXZ 建筑限高最小值, yd.JZXGZDZ 建筑限高最大值, tdyt.NAME 土地用途
FROM YDGD_INFO_GDHT ht
JOIN YDGL_INFO_XM xm ON xm.ID = ht.XMID
JOIN BIZ_INFO_SQR sqr ON ht.SRRID = sqr.ID
JOIN YDGD_INFO_GDHTCRZD zd ON ht.ID = zd.GDHTID
JOIN YDGD_INFO_GDHTCRJZFYD crj ON ht.ID = crj.GDHTID
JOIN YDGD_INFO_GDHTQTXX qtxx ON qtxx.GDHTID = ht.ID
JOIN YDGD_INFO_GDHTTDKFLYYJSYD yd ON ht.ID = yd.GDHTID
LEFT JOIN
(
SELECT qy.GDHTID, wmsys.wm_concat(xzqh.NAME) XZQY FROM YDGD_INFO_GDHTZDSZQY qy
JOIN BIZ_DICT_XZQH xzqh ON qy.SZXZQ = xzqh.CODE
GROUP BY qy.GDHTID
) qy ON qy.GDHTID = ht.ID
LEFT JOIN YDGD_DICT_CRFS crfs ON ht.CRFSBM = crfs.CODE
LEFT JOIN BIZ_DICT_TDYT tdyt ON tdyt.CODE = zd.ZYTDYTBM
LEFT JOIN YDGD_INFO_JSYDGD gd ON gd.GDHTID = ht.ID
LEFT JOIN YDGD_INFO_JSYDPZS pzs ON gd.JSYDPZSID = pzs.ID
WHERE ht.GDHTZT != -1
UNION all
SELECT
xm.XMMC 项目名称, sqr.SQRMC 申请用地单位名称, sqr.FRDBXM 法人, sqr.FRDBDHHM 法人办公电话, sqr.SJHM 法人移动电话,
sqr.TXDZ 单位地址, sqr.LXDH 联系人电话, sqr.EMAIL 电子邮件, sqr.YZBM 邮政编码,
jds.ID 主键, null 合同ID, jds.ID 决定书ID, jds.HBSBH 编号, jds.DZJGH 电子监管号, pzs.PZSWH 批准书文号, '划拨' 供应方式,--gd.GDYWLX 供应方式,
zd.TDZL 坐落, qy.XZQY 行政区域, zd.HBMJ 供地面积, zd.HBJ 金额, jds.QFSJ 签订日期,
yd.YDJDSJ 约定交地时间, yd.KGRQ 约定开工时间, yd.JGRQ 约定竣工时间,
yd.RJLZXZ 容积率最小值, yd.RJLZDZ 容积率最大值, yd.LHLZXZ 绿化率最小值, yd.LHLZDZ 绿化率最大值,
yd.JZMDZXZ 建筑密度最小值, yd.JZMDZDZ 建筑密度最大值, null 约定开发投资额, null 投资强度,
yd.ZJZMJ 建筑总面积, nvl(yd.DSJZXGZXZ, 0) + nvl(yd.DXJZXGZXZ, 0) 建筑限高最小值, nvl(yd.DSJZXGZDZ, 0) + nvl(yd.DXJZXGZDZ, 0) 建筑限高最大值, tdyt.NAME 土地用途
FROM YDGD_INFO_HBJDS jds
JOIN YDGL_INFO_XM xm ON xm.ID = jds.XMID
JOIN BIZ_INFO_SQR sqr ON jds.SYQRID = sqr.ID
JOIN YDGD_INFO_HBJDSZDXX zd ON jds.ID = zd.HBJDSID
JOIN YDGD_INFO_HBJDSTDKFLYYJSYD yd ON jds.ID = yd.HBJDSID
LEFT JOIN
(
SELECT qy.HBJDSID, wmsys.wm_concat(xzqh.NAME) XZQY FROM YDGD_INFO_HBJDSZDSZQY qy
JOIN BIZ_DICT_XZQH xzqh ON qy.SZXZQ = xzqh.CODE
GROUP BY qy.HBJDSID
) qy ON qy.HBJDSID = jds.ID
LEFT JOIN BIZ_DICT_TDYT tdyt ON tdyt.CODE = zd.ZDYTBM
LEFT JOIN YDGD_INFO_JSYDGD gd ON gd.HBJDSID = jds.ID
LEFT JOIN YDGD_INFO_JSYDPZS pzs ON gd.JSYDPZSID = pzs.ID
WHERE jds.HBJDSZT != -1
) sjy
LEFT JOIN PHJG_INFO_GDKZB kzb ON sjy.主键 = kzb.ID
--WHERE sjy.供应方式 is NULL OR sjy.供应方式 IN ('1', '2', '3')
ORDER BY sjy.签订日期 DESC
)
)