簡體   English   中英

使用pl / sql的Oracle Add過程

[英]Oracle Add procedure using pl/sql

在此處輸入圖片說明

程序如下所示! 我是oracle新手。 當我將sqlserver過程復制到oracle並更改某些部分時。 這將是一個極大的幫助我解決這個問題!

CREATE OR REPLACE PROCEDURE SP_GetAdminResource
(
AdminId IN NVARCHAR2,
p_ResultSet        OUT  sys_refcursor
) 
AS
BEGIN
WITH T AS(
    SELECT T1.ResId, T1.UpResId
      FROM SYS_Resource T1
     WHERE T1.IsActive = 1
       AND T1.ResId IN (SELECT DISTINCT T2.ResId
                          FROM SYS_RoleResource T2
                         WHERE T2.RoleId IN
                               (SELECT T3.RoleId
                                  FROM SYS_RoleAdministrator T3, SYS_Role T10
                                 WHERE T10.RoleId = T3.RoleId
                                   AND T10.IsActive = 1
                                   AND T3.AdminId = AdminId))),
     TT AS (SELECT *
              FROM T
            UNION ALL (SELECT T4.ResId, T4.UpResId
                        FROM SYS_Resource T4, T
                       WHERE T4.IsActive = 1
                         AND T4.ResId = T.UpResId)),
      SELECT  T5.ResId, T5.UpResId, T5.ResIcon,T5.ResName, T5.ResUrl,T5.OrderNum,T8.ActionCode
        FROM SYS_Resource T5 INTO p_ResultSet
        LEFT JOIN (SELECT T6.ResId, T6.ActionCode
               FROM SYS_RoleResource T6
              WHERE T6.RoleId IN
                    (SELECT T7.RoleId
                       FROM SYS_RoleAdministrator T7, SYS_Role T9
                      WHERE T9.RoleId = T7.RoleId
                        AND T9.IsActive = 1
                        AND T7.AdminId = AdminId)) T8 ON T5.ResId =
                                                         T8.ResId
       WHERE T5.IsActive = 1
         AND T5.ResId IN (SELECT DISTINCT TT.ResId FROM TT)
       ORDER BY T5.OrderNum ASC, T5.ResName ASC;


END SP_GetAdminResource;

檢查以下程序的工作版本。 我把評論放在中間。 請仔細檢查並相應地工作。

CREATE OR REPLACE PROCEDURE SP_GetAdminResource
(
AdminId            IN NVARCHAR2,
p_ResultSet        OUT  sys_refcursor
) 
AS
BEGIN

Open p_ResultSet for -- this is the way to use refcursor in your procedure
WITH T AS(
    SELECT T1.ResId, T1.UpResId
      FROM SYS_Resource T1
     WHERE T1.IsActive = 1
       AND T1.ResId IN (SELECT DISTINCT T2.ResId
                          FROM SYS_RoleResource T2
                         WHERE T2.RoleId IN
                               (SELECT T3.RoleId
                                  FROM SYS_RoleAdministrator T3, SYS_Role T10
                                 WHERE T10.RoleId = T3.RoleId
                                   AND T10.IsActive = 1
                                   AND T3.AdminId = t2.AdminId))), ----Check which AdminId need to be joined.I joined it with T2
    TT AS (SELECT T.ResId, T.UpResId
              FROM  T  
            UNION ALL (SELECT T4.ResId, T4.UpResId
                        FROM SYS_Resource T4, T
                       WHERE T4.IsActive = 1
                         AND T4.ResId = T.UpResId) )
                        -- ,                                 ----Extra Need to remove it
      SELECT  T5.ResId, 
              T5.UpResId 
--              T5.ResIcon,   ---Uncomment these columns in your query, I just made tables to test without these columns.
--              T5.ResName, 
--              T5.ResUrl,
--              T5.OrderNum,
--              T8.ActionCode
        FROM SYS_Resource T5 
  --      INTO p_ResultSet        -------------------------------No need to fetch into sysrefcursor.
        LEFT JOIN (SELECT T6.ResId, T6.ActionCode
               FROM SYS_RoleResource T6
              WHERE T6.RoleId IN
                    (SELECT T7.RoleId
                       FROM SYS_RoleAdministrator T7, SYS_Role T9
                      WHERE T9.RoleId = T7.RoleId
                        AND T9.IsActive = 1
                        AND T7.AdminId = t6.AdminId)) T8 ON T5.ResId =   ------Check which AdminId need to be joined.I joined it with T6
                                                         T8.ResId
       WHERE T5.IsActive = 1
         AND T5.ResId IN (SELECT DISTINCT TT.ResId FROM TT)
       ORDER BY T5.OrderNum ASC, T5.ResName ASC ;


END SP_GetAdminResource;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM