代码之家  ›  专栏  ›  技术社区  ›  James King

Oracle查询以提取不同的路由

  •  1
  • James King  · 技术社区  · 15 年前

    烧掉一个脑细胞。。。必须有一个简单的方法来做到这一点。

    approval_path
    approval_path_steps
    applications
    application_roles
    requests
    role_approvals
    

    用户 requests 一个 application role 为了一个 application approval path approval_path_steps . 批准路径的每个步骤的批准历史记录存储在 role_approvals

        approval_path:
        -> (p)approval_path_id 
       |                            
        -------------------------
                                 |
        approval_path_steps:     |
           (p)approval_path_id --|
     -->   (p)sequence_nbr       |
    |         approver           |
    |                            |
    |                            |
    |   applications:            |
    |   -> (p)application_id     |
    |  |      approval_path_id --
    |  |
    |   -------------------------
    |                            |
    |   application_roles:       |
    |   -> (p)role_id            |
    |  |      application_id  ---   
    |  |                        
    |   -------------------------
    |                            |
    |   requests:                |
    |   -> (p)request_nbr        |
    |  |      role_id         --- 
    |  |      requestor
    |  |
    |   -------------------------
    |                            |
    |   role_approvals:          |
    |      (p)request_nbr     --- 
     ----  (p)sequence_nbr        (NOT ACTUALLY KEYED!!!  ENTERED MANUALLY!!)
              approver
              status
    

    哪里 (p)

    问题是: 随着时间的推移,给定审批路径的审批路径步骤已更改;已添加、删除或从一个审批者更改为另一个审批者。因此 实际上是为了一个请求 批准路径步骤 当前为请求的角色的 approval_path .

    我需要的是: 我需要查询 以这样的方式列出不同的路径 使用。所以:

    role_approvals
    --------------
     1000  role1  1  manager    approved
     1000  role1  2  hr_mgr     approved
     1000  role1  3  app_owner  approved
    
     1001  role1  1  manager    approved
     1001  role1  2  hr_mgr     approved
     1001  role1  3  app_owner  approved
    
     1002  role1  1  app_owner  approved
     1002  role1  2  manager    approved
    


    :

    id  seq_nbr  approver
    --  -------  --------
     1        1  manager
     1        2  hr_mgr
     1        3  app_owner
    
     2        1  app_owner
     2        2  manager
    

    在“id”可以通过某种标识方式计算的地方,如何标识所采用的唯一批准路径并不重要。

    有什么想法吗?

    詹姆斯

    1 回复  |  直到 15 年前
        1
  •  0
  •   Dave Costa    15 年前

    这只是部分的解决办法。不幸的是,当我试图以此为基础将其转换回原始格式时,我得到了ORA-600错误。但至少它能让你找到不同的道路。

    select
      distinct xmlserialize(CONTENT approver_path AS VARCHAR2(2000)) distinct_path
    from (
      select
        request_nbr,
        xmlagg(xmlelement("Approver",approver) order by sequence_nbr) approver_path
      from
        role_approvals
      group by
        request_nbr
    )