⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad_role_orgaccess_trg.sql

📁 Java写的ERP系统
💻 SQL
字号:
CREATE OR REPLACE TRIGGER AD_Role_OrgAccess_Trg
AFTER INSERT OR UPDATE OR DELETE
	ON AD_Role_OrgAccess
 -- FOR EACH ROW
DECLARE
/*************************************************************************
 * The contents of this file are subject to the Compiere License.  You may
 * obtain a copy of the License at    http://www.compiere.org/license.html
 * Software is on an  "AS IS" basis,  WITHOUT WARRANTY OF ANY KIND, either
 * express or implied. See the License for details. Code: Compiere ERP+CRM
 * Copyright (C) 1999-2003 Jorg Janke, ComPiere, Inc. All Rights Reserved.
 *************************************************************************
 * $Id: AD_Role_OrgAccess_Trg.sql,v 1.3 2003/05/04 06:46:07 jjanke Exp $
 ***
 * Title:	Update AD_Role.OrgList / ClientList
 *  for all Roles as otherwise mutating trigger
 * Description:
 ************************************************************************/
	CURSOR	CUR_Role	IS
		SELECT	*
		FROM		AD_Role
		FOR UPDATE;
	CURSOR	Cur_Org (role_ID NUMBER)	IS
		SELECT	AD_Client_ID, AD_Org_ID 
		FROM		AD_Role_OrgAccess
		WHERE	AD_Role_ID = role_ID
		  AND	IsActive='Y'
		ORDER BY	AD_Client_ID, AD_Org_ID;
	--
	v_ClientList		VARCHAR2(2000) := '';
	v_OrgList			VARCHAR2(2000) := '';
	v_Client_ID		NUMBER := -1;
BEGIN
	--	For each Role
	FOR r IN CUR_Role LOOP
		v_ClientList := '';
		v_OrgList := '';
		v_Client_ID := -1;
		--	Assemble Client/OrgList
		FOR c IN Cur_Org (r.AD_Role_ID) LOOP
			IF (v_Client_ID <> c.AD_Client_ID) THEN
				v_Client_ID := c.AD_Client_ID;
				IF (LENGTH(v_ClientList) <> 0) THEN
					v_ClientList := v_ClientList || ',';
				END IF;
				v_ClientList := v_ClientList || c.AD_Client_ID;
			END IF;
			--	Org
			IF (LENGTH(v_OrgList) <> 0) THEN
				v_OrgList := v_OrgList || ',';
			END IF;
			v_OrgList := v_OrgList || c.AD_Org_ID;
		END LOOP;	-- Org
		--
		IF (v_ClientList IS NULL OR LENGTH(v_ClientList) = 0) THEN
			v_ClientList := ' ';
		END IF;
		IF (v_OrgList IS NULL OR LENGTH(v_OrgList) = 0) THEN
			v_OrgList := ' ';
		END IF;
		
		DBMS_OUTPUT.PUT_LINE(r.Name 
			|| ': Client=' || r.ClientList || '->' || v_ClientList
			|| ' - Org= ' || r.OrgList || '->' || v_OrgList);
		--	Update Role
		UPDATE	AD_Role
		  SET	ClientList = v_ClientList,
				OrgList = v_OrgList
		WHERE CURRENT OF CUR_Role;
	END LOOP;	--	Role
	
END AD_Role_OrgAccess_Trg;
/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -