题目是这样的,有2个表一个权限表P,主键是编号pid,还有列权限值pur
另外一个用户表u,主键是编号uid,然后还有两个列,分别是角色roleid和权限purid,
并且,roleid和purid中的值都是对应p表中的pid,可以包含多个pid的
然后就是查询了,传来权限值pur,就一个,对应的pid
要查的结果是uid,就是这条记录中的roleid或者purid,只要包含这个pid就符合查询结果
就是这个人的多个权限或角色中,只要包含传来的这个,就查出
另外一个用户表u,主键是编号uid,然后还有两个列,分别是角色roleid和权限purid,
并且,roleid和purid中的值都是对应p表中的pid,可以包含多个pid的
然后就是查询了,传来权限值pur,就一个,对应的pid
要查的结果是uid,就是这条记录中的roleid或者purid,只要包含这个pid就符合查询结果
就是这个人的多个权限或角色中,只要包含传来的这个,就查出
select uid
from u,(select pid from p where pur = 'xx') b
where u.pid = b.pid
or u.roleid = b.pid;
u.purid与u.roleid 的值
可能含有多个b.pid值
用等号可以?
from u,(select pid from p where pur = 'xx') b
where u.purid like '%'||b.pid||'%'
or u.roleid like '%'||b.pid||'%';
(
select 100 pid, 1 pur from dual
union all
select 200, 2 from dual
union all
select 300, 3 from dual
),
u as
(
select 'a' uids, 100 roleid, 100 purid from dual
union all
select 'b', 100, 100 from dual
union all
select 'c', 200, 200 from dual
union all
select 'd', 300, 300 from dual
union all
select 'e', 100, 100 from dual
union all
select 'f', 200, 200 from dual
union all
select 'g', 100, 100 from dual
)
select uids
from u,(select pid from p where pur = '1') b
where u.purid = b.pid
or u.roleid = b.pid;
如果数据格式是以上的话,可以得到结果
把表格式发来
sys_user
记录编号 V_REC_ID Varchar2 (10) PK
人员ID V_USER_ID Varchar2 (10)
角色 V_ROLE_REC_ID Varchar2(500) 可以是多个角色,记录SYS_PURVIEW表中的RecId,
权限 V_PUR_REC_ID Varchar2(500) 可以是多个权限,记录SYS_PURVIEW表中的RecId, sys_purview
记录编号 V_REC_ID Varchar2 (10) PK
权限编码 V_PUR_ID Varchar2(20) 有用到的应该就这几个列
现在已知权限编码了,目的就是搜索出拥有这个权限的人员
sys_user t2
where exists
(select 1 from sys_purview t1
where t1.V_PUR_ID = 'inputvalue'
and t1.V_REC_ID = t2.V_ROLE_REC_ID or t1.V_REC_ID = t2.V_PUR_REC_ID);
from sys_user a,(select V_REC_ID from sys_purview where V_PUR_ID ='PS-KHJL-GL') b where a.V_ROLE_REC_ID like '%'||b.V_REC_ID||'%' or a.V_PUR_REC_ID like '%'||b.V_REC_ID||'%'
这样写 有错么
sys_user t2
where exists
(select 1 from sys_purview t1
where t1.V_PUR_ID = 'inputvalue'
and (instr(t2.V_ROLE_REC_ID,t1.V_REC_ID) > 0
or instr(t2.V_PUR_REC_ID,t1.V_REC_ID) > 0));
from sys_user a,(select V_REC_ID from sys_purview where V_PUR_ID ='PS-KHJL-GL') b
where a.V_ROLE_REC_ID like '%'||b.V_REC_ID||'%'
or a.V_PUR_REC_ID like '%'||b.V_REC_ID||'%';你运行这个语句报错?还是查不出记录?
运行那语句,应该是语句出错了11楼的句子 刚在oracle里试了下,可以查出数据
现在要把完整的东西弄到系统里试下
&V_REC_ID就是传过来的权限编码。
这个可以吗?
是不是这样的啊?