1. 程式人生 > >Oracle 樹結構複雜場景模擬---------》如果登陸人是公司領導那麼就無所謂過濾責任部門,如果登陸人非公司級領導,那麼就當前登陸人的部門為責任部門查詢自己部門的資料

Oracle 樹結構複雜場景模擬---------》如果登陸人是公司領導那麼就無所謂過濾責任部門,如果登陸人非公司級領導,那麼就當前登陸人的部門為責任部門查詢自己部門的資料

      1. 表設計,首先確定的是樹結構表,假設是某一個公司確定是一個專案主項資訊,包含欄位有,責任部門,責任員工,編輯狀態 ,計劃型別,編制狀態,完成情況

CREATE TABLE BAI_PROJECT_PLAN(

    BAI_PROJECT_PLAN_ID VARCHAR2(32) PRIMARY KEY ,

    BAI_PROJECT_PLAN_P_ID VARCHAR2(32) ,

    BAI_ROOT_PROJECT_PLAN_ID

VARCHAR2(32) ,

    BAI_PROJECT_PLAN_NAME VARCHAR2(225) ,

    HOST_DEPT_NAME VARCHAR2(225) ,

    HOST_DEPT_CODE VARCHAR2(32) ,

    PROJECT_PLAN_STATUS VARCHAR(2),

    BAI_PLAN_TYPE VARCHAR2(2)

);

 

insert

into BAI_PROJECT_PLAN

  (BAI_PROJECT_PLAN_ID,

   BAI_PROJECT_PLAN_P_ID,

   BAI_ROOT_PROJECT_PLAN_ID,

   BAI_PROJECT_PLAN_NAME,

   HOST_DEPT_NAME,

   HOST_DEPT_CODE,

   PROJECT_PLAN_STATUS,

   BAI_PLAN_TYPE)

values

  ('A36DABCA0616496BBD016F787613E22D',

   'root',

   'A36DABCA0616496BBD016F787613E22D',

   '投資計劃測試1207',

   '資訊科技部',

   '4147',

   '7',

   '1');

 

insert into BAI_PROJECT_PLAN

  (BAI_PROJECT_PLAN_ID,

   BAI_PROJECT_PLAN_P_ID,

   BAI_ROOT_PROJECT_PLAN_ID,

   BAI_PROJECT_PLAN_NAME,

   HOST_DEPT_NAME,

   HOST_DEPT_CODE,

   PROJECT_PLAN_STATUS,

   BAI_PLAN_TYPE)

values

  ('20171207193248967000100000500000',

   '20171207193248967000100000300000',

   'A36DABCA0616496BBD016F787613E22D',

   '工藝主項1',

   '資訊科技部',

   '4147',

   '7',

   '1');

 

insert into BAI_PROJECT_PLAN

  (BAI_PROJECT_PLAN_ID,

   BAI_PROJECT_PLAN_P_ID,

   BAI_ROOT_PROJECT_PLAN_ID,

   BAI_PROJECT_PLAN_NAME,

   HOST_DEPT_NAME,

   HOST_DEPT_CODE,

   PROJECT_PLAN_STATUS,

   BAI_PLAN_TYPE)

values

  ('20171207193248967000100000600000',

   '20171207193248967000100000200000',

   'A36DABCA0616496BBD016F787613E22D',

   '輔樓',

   '企業發展部',

   '4021',

   '7',

   '1');

 

insert into BAI_PROJECT_PLAN

  (BAI_PROJECT_PLAN_ID,

   BAI_PROJECT_PLAN_P_ID,

   BAI_ROOT_PROJECT_PLAN_ID,

   BAI_PROJECT_PLAN_NAME,

   HOST_DEPT_NAME,

   HOST_DEPT_CODE,

   PROJECT_PLAN_STATUS,

   BAI_PLAN_TYPE)

values

  ('366C12DFC2A241D7AECBA60553A6624E',

   'A36DABCA0616496BBD016F787613E22D',

   'A36DABCA0616496BBD016F787613E22D',

   '投資計劃基本資訊',

   '資訊科技部',

   '4147',

   '7',

   '1');

 

insert into BAI_PROJECT_PLAN

  (BAI_PROJECT_PLAN_ID,

   BAI_PROJECT_PLAN_P_ID,

   BAI_ROOT_PROJECT_PLAN_ID,

   BAI_PROJECT_PLAN_NAME,

   HOST_DEPT_NAME,

   HOST_DEPT_CODE,

   PROJECT_PLAN_STATUS,

   BAI_PLAN_TYPE)

values

  ('20171207193248967000100000300000',

   'A36DABCA0616496BBD016F787613E22D',

   'A36DABCA0616496BBD016F787613E22D',

   'RX-2017-0736立項測試1201-007',

   '資訊科技部',

   '4147',

   '7',

   '1');

 

insert into BAI_PROJECT_PLAN

  (BAI_PROJECT_PLAN_ID,

   BAI_PROJECT_PLAN_P_ID,

   BAI_ROOT_PROJECT_PLAN_ID,

   BAI_PROJECT_PLAN_NAME,

   HOST_DEPT_NAME,

   HOST_DEPT_CODE,

   PROJECT_PLAN_STATUS,

   BAI_PLAN_TYPE)

values

  ('20171207193248967000100000400000',

   '20171207193248967000100000500000',

   'A36DABCA0616496BBD016F787613E22D',

   '中央空調',

   '經營管理部',

   '4025',

   '7',

   '1');

 

insert into BAI_PROJECT_PLAN

  (BAI_PROJECT_PLAN_ID,

   BAI_PROJECT_PLAN_P_ID,

   BAI_ROOT_PROJECT_PLAN_ID,

   BAI_PROJECT_PLAN_NAME,

   HOST_DEPT_NAME,

   HOST_DEPT_CODE,

   PROJECT_PLAN_STATUS,

   BAI_PLAN_TYPE)

values

  ('20171207193248967000100000100000',

   '20171207193248967000100000200000',

   'A36DABCA0616496BBD016F787613E22D',

   '主樓',

   '資訊科技部',

   '4147',

   '7',

   '1');

 

insert into BAI_PROJECT_PLAN

  (BAI_PROJECT_PLAN_ID,

   BAI_PROJECT_PLAN_P_ID,

   BAI_ROOT_PROJECT_PLAN_ID,

   BAI_PROJECT_PLAN_NAME,

   HOST_DEPT_NAME,

   HOST_DEPT_CODE,

   PROJECT_PLAN_STATUS,

   BAI_PLAN_TYPE)

values

  ('20171207193248967000100000200000',

   '20171207193248967000100000300000',

   'A36DABCA0616496BBD016F787613E22D',

   '建築主項',

   '經營管理部',

   '4025',

   '7',

   '1');

      1. 查詢條件,如果公司領導是公司級領導就不過濾責任部門

SELECT BAI_PROJECT_PLAN_ID,

       BAI_PROJECT_PLAN_P_ID,

       BAI_ROOT_PROJECT_PLAN_ID,

       BAI_PROJECT_PLAN_NAME,

       HOST_DEPT_NAME,

       HOST_DEPT_CODE,

       PROJECT_PLAN_STATUS,

       BAI_PLAN_TYPE

  FROM BAI_PROJECT_PLAN

 WHERE BAI_PROJECT_PLAN_ID IN

       (SELECT BAI_PROJECT_PLAN_ID

          FROM (SELECT T.BAI_PROJECT_PLAN_ID, T.BAI_PROJECT_PLAN_P_ID

                  FROM BAI_PROJECT_PLAN T

                 WHERE T.BAI_ROOT_PROJECT_PLAN_ID =

                       'A36DABCA0616496BBD016F787613E22D') A

         START WITH A.BAI_PROJECT_PLAN_ID IN (SELECT P.BAI_PROJECT_PLAN_ID

                                                FROM BAI_PROJECT_PLAN P

                                               WHERE P.BAI_ROOT_PROJECT_PLAN_ID =

                                                     'A36DABCA0616496BBD016F787613E22D'

                                              --AND P.HOST_DEPT_CODE = '4147'

                                              )

        CONNECT BY PRIOR A.BAI_PROJECT_PLAN_P_ID = A.BAI_PROJECT_PLAN_ID)

      1. 查詢條件,如果公司領導是非公司級領導就過濾責任部門

SELECT BAI_PROJECT_PLAN_ID,

       BAI_PROJECT_PLAN_P_ID,

       BAI_ROOT_PROJECT_PLAN_ID,

       BAI_PROJECT_PLAN_NAME,

       HOST_DEPT_NAME,

       HOST_DEPT_CODE,

       PROJECT_PLAN_STATUS,

       BAI_PLAN_TYPE

  FROM BAI_PROJECT_PLAN

 WHERE BAI_PROJECT_PLAN_ID IN

       (SELECT BAI_PROJECT_PLAN_ID

          FROM (SELECT T.BAI_PROJECT_PLAN_ID, T.BAI_PROJECT_PLAN_P_ID

                  FROM BAI_PROJECT_PLAN T

                 WHERE T.BAI_ROOT_PROJECT_PLAN_ID =

                       'A36DABCA0616496BBD016F787613E22D') A

         START WITH A.BAI_PROJECT_PLAN_ID IN

                    (SELECT P.BAI_PROJECT_PLAN_ID

                       FROM BAI_PROJECT_PLAN P

                      WHERE P.BAI_ROOT_PROJECT_PLAN_ID =

                            'A36DABCA0616496BBD016F787613E22D'

                        AND P.HOST_DEPT_CODE = '4147')

        CONNECT BY PRIOR A.BAI_PROJECT_PLAN_P_ID = A.BAI_PROJECT_PLAN_ID)