pgsql迁移视图到oracle 问题总结

相关参考资料:
1.Oracle 12c中的SQL/JSON函数
1)http://blog.itpub.net/29337971/viewspace-2130196/
2)https://community.oracle.com/groups/sdoug/blog/2016/12/03/oracle-12c-122-%E4%B8%AD%E5%BC%95%E5%85%A5%E7%9A%84sql-json%E5%87%BD%E6%95%B0
3)https://wenku.baidu.com/view/e6a63d95cf2f0066f5335a8102d276a2002960a0.html

oracle是没有::(类型转换),json_agg,array_agg,Array的。所以pgsql迁移视图的过程中,需要对oracle的sql进行调整,一下针对所说需要转换的聚合函数,以2个例子来展示。

pgsql

CREATE OR REPLACE VIEW user_view AS 
 SELECT staff.id,
    staff.name,
    staff.mobile,
    staff.sn,
    staff.id_card,
    staff.device_type,
    staff.device_token,
    staff.dingtalk_id,
    staff.create_at,
    staff.area_id,
    staff.sex,
    staff.address,
    staff.deleted,
    ( SELECT json_agg(v.*) AS json_agg) AS staff_roles,
    ( SELECT array_agg(v.en_name) AS json_agg) AS roles,
    ( SELECT array_agg(v.id) AS array_agg) AS role_ids
   FROM staff
     LEFT JOIN staff_staff_role_view v ON staff.id = v.staff_id
  WHERE v.en_name = 'USER'::text
  GROUP BY staff.id;

oracle

CREATE OR REPLACE FORCE EDITIONABLE VIEW "DEVSX_CAPITAL"."USER_VIEW" ("ID", "NAME", "MOBILE", "SN", "ID_CARD", "DEVICE_TYPE", "DEVICE_TOKEN", "DINGTALK_ID", "CREATE_AT", "AREA_ID", "SEX", "ADDRESS", "DELETED", "STAFF_ROLES", "ROLES", "ROLE_IDS") AS 
  SELECT staff.id,
    staff.name,
    staff.mobile,
    staff.sn,
    staff.id_card,
    staff.device_type,
    staff.device_token,
    staff.dingtalk_id,
    staff.create_at,
    staff.area_id,
    staff.sex,
    staff.address,
    staff.deleted,
    ( SELECT JSON_OBJECT(KEY 'id' value v.ID,KEY 'staff_id' value v.STAFF_ID,KEY 'staff_role.id' value v.STAFF_ROLE_ID,KEY 'en_name' value v.EN_NAME,KEY 'cn_name' value v.CN_NAME,KEY 'power' value v.POWER,KEY 'type' value v.type) AS json_agg  FROM staff_staff_role_view v) AS staff_roles,
    ( SELECT listagg(v.en_name,',') WITHIN GROUP(ORDER BY v.EN_NAME) AS json_agg FROM staff_staff_role_view v ) AS roles,
    ( SELECT listagg(v.id,',') WITHIN GROUP(ORDER BY v.id) AS array_agg FROM staff_staff_role_view v) AS role_ids
   FROM staff
     LEFT JOIN staff_staff_role_view v ON staff.id = v.staff_id
  WHERE v.en_name = 'USER'
  GROUP BY staff.id,
    staff.name,
    staff.mobile,
    staff.sn,
    staff.id_card,
    staff.device_type,
    staff.device_token,
    staff.dingtalk_id,
    staff.create_at,
    staff.area_id,
    staff.sex,
    staff.address,
    staff.deleted;

pgsql

CREATE OR REPLACE VIEW asset_real_view AS 
 SELECT asset.internal,
    asset.create_at,
    asset.name,
    asset.pre_asset_id,
    asset.id_card,
    asset.id,
    asset.house_area,
    asset.house_attribution,
    asset.loan_purpose,
    ( SELECT asset_snapshot_1.status
           FROM asset_snapshot asset_snapshot_1
          WHERE asset.internal = asset_snapshot_1.asset_id) AS status,
    apply_data.data ->> 'mobile'::text AS mobile,
    apply_info.data ->> 'marital_status'::text AS marital_status,
    apply_data.data ->> 'address'::text AS address,
    house_info.data ->> 'detail_address'::text AS house_address,
    apply_data.data ->> 'business'::text AS business,
    apply_data.data ->> 'business_address'::text AS business_address,
    apply_data.data ->> 'work_status'::text AS work_status,
    apply_data.data ->> 'education_lev'::text AS education_lev,
    end_audit.data ->> 'repayment_method_id'::text AS repayment_method_id,
    end_audit.data ->> 'repayment_method_name'::text AS repayment_method_name,
    end_audit.data ->> 'reply_amount'::text AS reply_amount,
    loan_info_data.data ->> 'loan_amount'::text AS loan_amount,
        CASE
            WHEN zd_audit.data IS NULL THEN '未评估'::text
            WHEN (zd_audit.data ->> 'TotalPrice'::text) = '0'::text THEN '未评估'::text
            WHEN (zd_audit.data ->> 'TotalPrice'::text) = '0.0'::text THEN '未评估'::text
            ELSE '已评估'::text
        END AS house_audit_status,
    asset_info.data ->> 'building_area'::text AS house_building_area,
    asset_info.data ->> 'house_name'::text AS house_name,
    loan_info_data.data ->> 'purpose'::text AS purpose,
    loan_info_data.data ->> 'loan_time'::text AS loan_time,
    loan_info_data.data ->> 'loan_amount'::text AS apply_amount,
    first_audit.data ->> 'pre_reply_amount'::text AS pre_reply_amount,
    ( SELECT asset_item_view_1.type
           FROM asset_item_data asset_item_view_1
          WHERE (asset_item_view_1.type = ANY (ARRAY['审核中'::text, '办理中'::text, '已放款'::text, '已拒绝'::text])) AND asset.internal = asset_item_view_1.asset_id
          ORDER BY asset_item_view_1.create_at DESC
         LIMIT 1) AS user_status,
    ( SELECT bpmn_activity.view_roles
           FROM bpmn_activity
          WHERE bpmn_activity.current_status = asset_snapshot.status
         LIMIT 1) AS view_roles,
    ( SELECT asset_status.value
           FROM asset_status
          WHERE asset_status.key = asset_snapshot.status
         LIMIT 1) AS status_show,
        CASE
            WHEN (apply_info.data ->> 'invite_code'::text) IS NULL THEN '无'::text
            WHEN (apply_info.data ->> 'invite_code'::text) = 'zbzz001'::text THEN '装备制造'::text
            WHEN (apply_info.data ->> 'invite_code'::text) = 'yyb001'::text THEN '总行营业部'::text
            WHEN (apply_info.data ->> 'invite_code'::text) = 'xdfw001'::text THEN '现代服务'::text
            WHEN (apply_info.data ->> 'invite_code'::text) = 'csgx001'::text THEN '城市更新'::text
            WHEN (apply_info.data ->> 'invite_code'::text) = 'kjcm001'::text THEN '科技传媒'::text
            WHEN (apply_info.data ->> 'invite_code'::text) = 'yysy001'::text THEN '医药事业'::text
            WHEN (apply_info.data ->> 'invite_code'::text) = 'xfjr001'::text THEN '消费金融'::text
            WHEN (apply_info.data ->> 'invite_code'::text) = 'phjr001'::text THEN '普惠金融'::text
            WHEN (apply_info.data ->> 'invite_code'::text) = 'zht001'::text THEN '总行中后台'::text
            ELSE '无'::text
        END AS invite_code,
    apply_info.data ->> 'invite_code'::text AS invite_code_number
   FROM asset
     LEFT JOIN ( SELECT asset_snapshot_1.id,
            asset_snapshot_1.status,
            asset_snapshot_1.bpmn_id,
            asset_snapshot_1.business_type_id,
            asset_snapshot_1.asset_id,
            asset_snapshot_1.product_id
           FROM asset_snapshot asset_snapshot_1) asset_snapshot ON asset.internal = asset_snapshot.asset_id
     LEFT JOIN ( SELECT asset_item_view_1.asset_id,
            asset_item_view_1.data,
            asset_item_view_1.type,
            asset_item_view_1.create_at
           FROM asset_item_data asset_item_view_1
          WHERE asset_item_view_1.type = '贷款人基本信息采集'::text) apply_data ON asset.pre_asset_id = apply_data.asset_id
     LEFT JOIN ( SELECT asset_item_view_1.asset_id,
            asset_item_view_1.data,
            asset_item_view_1.type,
            asset_item_view_1.create_at
           FROM asset_item_data asset_item_view_1
          WHERE asset_item_view_1.type = '初审结果'::text) first_audit ON asset.internal = first_audit.asset_id
     LEFT JOIN ( SELECT asset_item_view_1.asset_id,
            asset_item_view_1.data,
            asset_item_view_1.type,
            asset_item_view_1.create_at
           FROM asset_item_data asset_item_view_1
          WHERE asset_item_view_1.type = '终审结果'::text) end_audit ON asset.internal = end_audit.asset_id
     LEFT JOIN ( SELECT asset_item_view_1.asset_id,
            asset_item_view_1.data,
            asset_item_view_1.type,
            asset_item_view_1.create_at
           FROM asset_item_data asset_item_view_1
          WHERE asset_item_view_1.type = '申请贷款'::text) apply_info ON asset.pre_asset_id = apply_info.asset_id
     LEFT JOIN ( SELECT asset_item_view_1.asset_id,
            asset_item_view_1.data,
            asset_item_view_1.type,
            asset_item_view_1.create_at
           FROM asset_item_data asset_item_view_1
          WHERE asset_item_view_1.type = '自动评估'::text) zd_audit ON asset.internal = zd_audit.asset_id
     LEFT JOIN ( SELECT asset_item_view_1.asset_id,
            asset_item_view_1.data,
            asset_item_view_1.type,
            asset_item_view_1.create_at
           FROM asset_item_data asset_item_view_1
          WHERE asset_item_view_1.type = ANY (ARRAY['资产信息采集1'::text, '资产信息采集2'::text])) asset_info ON asset.internal = asset_info.asset_id
     LEFT JOIN ( SELECT asset_item_view_1.asset_id,
            asset_item_view_1.data,
            asset_item_view_1.type,
            asset_item_view_1.create_at
           FROM asset_item_data asset_item_view_1
          WHERE asset_item_view_1.type = ANY (ARRAY['贷款信息采集1'::text, '贷款信息采集2'::text])) loan_info_data ON asset.internal = loan_info_data.asset_id
     LEFT JOIN ( SELECT asset_item_view_1.asset_id,
            asset_item_view_1.data,
            asset_item_view_1.type,
            asset_item_view_1.create_at
           FROM asset_item_data asset_item_view_1
          WHERE asset_item_view_1.type = ANY (ARRAY['房产证1'::text, '房产证2'::text])) house_info ON asset.internal = house_info.asset_id;

oracle

CREATE OR REPLACE FORCE EDITIONABLE VIEW "DEVSX_CAPITAL"."ASSET_REAL_VIEW" ("INTERNAL", "CREATE_AT", "NAME", "PRE_ASSET_ID", "ID_CARD", "ID", "HOUSE_AREA", "HOUSE_ATTRIBUTION", "LOAN_PURPOSE", "STATUS", "MOBILE", "MARITAL_STATUS", "ADDRESS", "HOUSE_ADDRESS", "BUSINESS", "BUSINESS_ADDRESS", "WORK_STATUS", "EDUCATION_LEV", "REPAYMENT_METHOD_ID", "REPAYMENT_METHOD_NAME", "REPLY_AMOUNT", "LOAN_AMOUNT", "HOUSE_AUDIT_STATUS", "HOUSE_BUILDING_AREA", "HOUSE_NAME", "PURPOSE", "LOAN_TIME", "APPLY_AMOUNT", "PRE_REPLY_AMOUNT", "USER_STATUS", "VIEW_ROLES", "STATUS_SHOW", "INVITE_CODE", "INVITE_CODE_NUMBER") AS 
  SELECT asset.internal,

        to_char(asset.create_at, 'yyyy-mm-dd hh24:mi:ss.ff ') create_at,
    asset.name,
    asset.pre_asset_id,
    asset.id_card,
    asset.id,
    asset.house_area,
    asset.house_attribution,
    asset.loan_purpose,
    ( SELECT asset_snapshot_1.status
           FROM asset_snapshot asset_snapshot_1
          WHERE asset.internal = asset_snapshot_1.asset_id)  status,
             json_value(apply_data.data,'$.mobile') mobile,
              json_value(apply_info.data,'$.marital_status') marital_status,
               json_value(apply_data.data,'$.address') address,
               json_value(house_info.data,'$.detail_address') house_address,
               json_value(apply_data.data,'$.business') business,
               json_value(apply_data.data,'$.business_address') business_address,
               json_value(apply_data.data,'$.work_status') work_status,
               json_value(apply_data.data,'$.education_lev') education_lev,
               json_value(end_audit.data,'$.repayment_method_id') repayment_method_id,
               json_value(end_audit.data,'$.repayment_method_name') repayment_method_name,
               json_value(end_audit.data,'$.reply_amount') reply_amount,
               json_value(loan_info_data.data,'$.loan_amount') loan_amount,

                CASE
            WHEN zd_audit.data IS NULL THEN '未评估'
            WHEN to_char(json_value(zd_audit.data,'$.TotalPrice')) = '0' THEN '未评估'
            WHEN to_char(json_value(zd_audit.data,'$.TotalPrice')) = '0.0' THEN '未评估'
            ELSE '已评估'
        END AS house_audit_status,


       json_value(asset_info.DATA,'$.building_area')  house_building_area,
       json_value(asset_info.DATA,'$.house_name')  house_name,
 json_value(loan_info_data.DATA,'$.purpose')  purpose,
json_value(loan_info_data.DATA,'$.loan_time')  loan_time,
json_value(loan_info_data.DATA,'$.loan_amount')  apply_amount,
json_value(first_audit.DATA,'$.pre_reply_amount')  pre_reply_amount,


    ( SELECT * FROM (SELECT asset_item_view_1.type
           FROM asset_item_data asset_item_view_1
          WHERE asset_item_view_1.type in ('审核中', '办理中', '已放款', '已拒绝') AND asset.internal = asset_item_view_1.asset_id
          ORDER BY asset_item_view_1.create_at DESC
         ) WHERE rownum=1) AS user_status,
    ( SELECT * FROM (SELECT bpmn_activity.view_roles
           FROM bpmn_activity
          WHERE bpmn_activity.current_status = asset_snapshot.status
         ) WHERE rownum=1) AS view_roles,
    ( SELECT * FROM (SELECT asset_status.value
           FROM asset_status
          WHERE asset_status.key = asset_snapshot.status
         ) WHERE rownum=1) AS status_show,
        CASE
            WHEN (json_value(apply_info.DATA,'$.invite_code')) IS NULL THEN '无'
            WHEN (json_value(apply_info.DATA,'$.invite_code')) = 'zbzz001' THEN '装备制造'
            WHEN (json_value(apply_info.DATA,'$.invite_code')) = 'yyb001' THEN '总行营业部'
            WHEN (json_value(apply_info.DATA,'$.invite_code')) = 'xdfw001' THEN '现代服务'
            WHEN (json_value(apply_info.DATA,'$.invite_code')) = 'csgx001' THEN '城市更新'
            WHEN (json_value(apply_info.DATA,'$.invite_code')) = 'kjcm001' THEN '科技传媒'
            WHEN (json_value(apply_info.DATA,'$.invite_code')) = 'yysy001' THEN '医药事业'
            WHEN (json_value(apply_info.DATA,'$.invite_code')) = 'xfjr001' THEN '消费金融'
            WHEN (json_value(apply_info.DATA,'$.invite_code')) = 'phjr001' THEN '普惠金融'
            WHEN (json_value(apply_info.DATA,'$.invite_code')) = 'zht001' THEN '总行中后台'
            ELSE '无'
        END AS invite_code,
    json_value(apply_info.DATA,'$.invite_code')  invite_code_number
   FROM asset
     LEFT JOIN ( SELECT asset_snapshot_1.id,
            asset_snapshot_1.status,
            asset_snapshot_1.bpmn_id,
            asset_snapshot_1.business_type_id,
            asset_snapshot_1.asset_id,
            asset_snapshot_1.product_id
           FROM asset_snapshot asset_snapshot_1) asset_snapshot ON asset.internal = asset_snapshot.asset_id
     LEFT JOIN ( SELECT asset_item_view_1.asset_id,
            asset_item_view_1.data,
            asset_item_view_1.type,
            asset_item_view_1.create_at
           FROM asset_item_data asset_item_view_1
          WHERE asset_item_view_1.type = '贷款人基本信息采集') apply_data ON asset.pre_asset_id = apply_data.asset_id
     LEFT JOIN ( SELECT asset_item_view_1.asset_id,
            asset_item_view_1.data,
            asset_item_view_1.type,
            asset_item_view_1.create_at
           FROM asset_item_data asset_item_view_1
          WHERE asset_item_view_1.type = '初审结果') first_audit ON asset.internal = first_audit.asset_id
     LEFT JOIN ( SELECT asset_item_view_1.asset_id,
            asset_item_view_1.data,
            asset_item_view_1.type,
            asset_item_view_1.create_at
           FROM asset_item_data asset_item_view_1
          WHERE asset_item_view_1.type = '终审结果') end_audit ON asset.internal = end_audit.asset_id
     LEFT JOIN ( SELECT asset_item_view_1.asset_id,
            asset_item_view_1.data,
            asset_item_view_1.type,
            asset_item_view_1.create_at
           FROM asset_item_data asset_item_view_1
          WHERE asset_item_view_1.type = '申请贷款') apply_info ON asset.pre_asset_id = apply_info.asset_id
     LEFT JOIN ( SELECT asset_item_view_1.asset_id,
            asset_item_view_1.data,
            asset_item_view_1.type,
            asset_item_view_1.create_at
           FROM asset_item_data asset_item_view_1
          WHERE asset_item_view_1.type = '自动评估') zd_audit ON asset.internal = zd_audit.asset_id
     LEFT JOIN ( SELECT asset_item_view_1.asset_id,
            asset_item_view_1.data,
            asset_item_view_1.type,
            asset_item_view_1.create_at
           FROM asset_item_data asset_item_view_1
          WHERE asset_item_view_1.type IN ('资产信息采集1', '资产信息采集2')) asset_info ON asset.internal = asset_info.asset_id
     LEFT JOIN ( SELECT asset_item_view_1.asset_id,
            asset_item_view_1.data,
            asset_item_view_1.type,
            asset_item_view_1.create_at
           FROM asset_item_data asset_item_view_1
          WHERE asset_item_view_1.type IN ('贷款信息采集1', '贷款信息采集2')) loan_info_data ON asset.internal = loan_info_data.asset_id
     LEFT JOIN ( SELECT asset_item_view_1.asset_id,
            asset_item_view_1.data,
            asset_item_view_1.type,
            asset_item_view_1.create_at
           FROM asset_item_data asset_item_view_1
          WHERE asset_item_view_1.type  IN ('房产证1', '房产证2')) house_info ON asset.internal = house_info.asset_id;

猜你喜欢

转载自blog.csdn.net/qq847540343/article/details/80760510
今日推荐