存储过程之权限复制
CREATE OR REPLACE PROCEDURE "P_PERMISSION_COPY"
(
V_FROM_RES_ID VARCHAR2,
V_TO_RES_ID VARCHAR2,
V_RETCODE OUT VARCHAR2,
V_RETINFO OUT VARCHAR2
) IS
/* ------------------------------------------------
*名称 --%@NAME: 权限管理-角色赋权 复制 v_from_res_id 权限到 v_to_res_id
*功能描述 --%@COMMENT: 权限管理
*参数 --%@PARAM:v_from_res_id
*参数 --%@PARAM:v_to_res_id
*参数 --%@PARAM:V_RETCODE 过程执行返回参数
*参数 --%@PARAM:V_RETINFO 过程执行错误日志
*创建人 --%@CREATOR:admin
*创建时间 --%@CREATED_TIME:
*备注 --%@REMARK:
*修改记录 --%@MODIFY:
-------------------------------------------------*/
V_USERNAME VARCHAR2(40);
V_PROCDESC VARCHAR2(40);
V_PROCNAME VARCHAR2(40);
V_TELE_TYPE VARCHAR2(10);
V_ROW_NUM NUMBER;
V_RES_ID VARCHAR2(30);
V_SQL VARCHAR2(1000);
V_COUNT NUMBER;
BEGIN
V_USERNAME := 'HN_DSS'; --用户名
V_PROCDESC := '权限管理'; --过程描述
V_PROCNAME := 'P_PURE_USER_PERMISSION'; --过程名
V_TELE_TYPE := 'ALL'; --网别
V_ROW_NUM := 0;
-- 获取资源角色权限
FOR CC_ROLE IN (SELECT *
FROM HN_DSS.PURE_ROLE_PERMISSION T
WHERE T.RESOURCES_ID = V_FROM_RES_ID) LOOP
--先判断该角色是否已有该资源权限
SELECT COUNT(1)
INTO V_COUNT
FROM HN_DSS.PURE_ROLE_PERMISSION A
WHERE A.ROLE_ID = CC_ROLE.ROLE_ID
AND A.RESOURCES_ID = V_TO_RES_ID;
--没有 复制权限
IF V_COUNT <= 0 THEN
INSERT INTO HN_DSS.PURE_ROLE_PERMISSION
(ROLE_ID,
RESOURCES_ID,
AUTH_CREATE,
AUTH_READ,
AUTH_UPDATE,
AUTH_DELETE)
SELECT CC_ROLE.ROLE_ID, V_TO_RES_ID, 0, 1, 0, 0 FROM DUAL;
V_ROW_NUM := V_ROW_NUM + 1;
--每复制100条 提交
IF V_ROW_NUM >= 100 THEN
COMMIT;
V_ROW_NUM := 0;
END IF;
END IF;
END LOOP;
--获取资源用户权限
FOR CC_USER_PERMISSION IN (SELECT *
FROM HN_DSS.PURE_USER_PERMISSION T
WHERE T.RESOURCES_ID = V_FROM_RES_ID) LOOP
--判断该用户是否已有该资源权限
SELECT COUNT(1)
INTO V_COUNT
FROM HN_DSS.PURE_USER_PERMISSION A
WHERE A.USER_ID = CC_USER_PERMISSION.USER_ID
AND A.RESOURCES_ID = V_TO_RES_ID;
--没有 复制权限
IF V_COUNT <= 0 THEN
INSERT INTO HN_DSS.PURE_USER_PERMISSION
(USER_ID,
RESOURCES_ID,
AUTH_CREATE,
AUTH_READ,
AUTH_UPDATE,
AUTH_DELETE)
SELECT CC_USER_PERMISSION.USER_ID,
V_TO_RES_ID RESOURCES_ID,
0,
1,
0,
0
FROM DUAL;
V_ROW_NUM := V_ROW_NUM + 1;
--每复制100条 提交
IF V_ROW_NUM >= 100 THEN
COMMIT;
V_ROW_NUM := 0;
END IF;
END IF;
END LOOP;
--最后不满100条 提交
COMMIT;
V_RETCODE := 'SUCCESS';
EXCEPTION
WHEN OTHERS THEN
V_RETCODE := 'FAIL';
V_RETINFO := SQLERRM;
END P_PURE_USER_PERMISSION;
上一篇: JaValid 1.2发布
下一篇: Oracle存储过程开发
推荐阅读