Oracle中从数据字典中查询出多条记录,保存到一个字段中显示出来
来源:互联网 发布:别人域名到期了能买吗 编辑:程序博客网 时间:2024/06/05 15:33
在工作中遇到一个问题,将问题简化为以下内容:
一个user可以有多个role,角色信息存储在字典表中,根据用户的分类代码fldm(role)找到用户可能拥有的所有的角色,
筛选出自身所拥有的角色,并在一个字段中显示出来。
1.创建一个t_user表,根据用户的编码
create table t_user(
userid number constraint pk_user primary key,
username varchar2(15),
fldm varchar2(15), ---分类代码
code_num number default 0 check(code_num between 0 and 15) --编码数字(对应于字典表中的编码)
)
2.然后向表t_user中插入数据,如下图所示
3.创建数据字典表t_dictionary
create table t_dictionary(
fldm varchar2(15), ---分类代码
flmc varchar2(15), ---分类名称
code number -- 编码
)
4.向数据字典表中插入角色数据,如下如所示
5.通过如下语句可以完成:
select userid 用户id,username 用户名,
(case when bitand(code_num,1)=1 then(select flmc from t_dictionary where fldm='role'and code=1) ||';'else null end||
case when bitand(code_num,2)=2 then(select flmc from t_dictionary where fldm='role' and code=2) ||';'else null end||
case when bitand(code_num,4)=4 then(select flmc from t_dictionary where fldm='role' and code=4) ||';'else null end||
case when bitand(code_num,8)=8 then(select flmc from t_dictionary where fldm='role' and code=8) ||';'else null end)角色
from t_user
6.查询结果如下图所示:
------------------问题总结:
1.角色名存储在数据字典中,用户可以根据fldm(分类代码)=‘role’ 匹配到所有的角色
2.角色的code(代码)以1,2,4,8的方式存储在字典表中,用户可以根据自身的code_num按照二进制按位与(&)或者oracle中的函数bitand(code_num,2^n)=n来判断用户是不是拥有该角色。
3.通过case when 语句可以实现条件的判断,有对应角色的话,就返回角色的名称,否则返回null。
4.通过||符号实现多个角色的拼接,让它们显示在同一个字段中。
5.角色按照code以1,2,4,8 (2^n)的方式存储,可以很方便的使用按位与&进行判断。(推荐以后创建数据字典使用这种方法)
- Oracle中从数据字典中查询出多条记录,保存到一个字段中显示出来
- 数据字典查询数据库中分区字段
- xml中保存如何保存图片及从XML中读取出来显示到浏览器中
- 保存在数据中image字段的图片文件显示出来
- WPF中把图片保存到数据库,并且从数据库提取出来显示
- WPF中把图片保存到数据库,并从数据库提取出来显示
- 如何用c#连接到oracle数据库并用DataGrid把表中字段显示出来
- 从一个不关联的表中查询字段插入到另外一个表中
- 把从数据库中查询出的一个字段封装到一个List中,返回List
- oracle数据库中查询一个表中的字段是否存在于另一个表中字段数据
- sql 查询字段 两个字段以一个字段的形式显示 + 同属一个组的 在一个行列中显示出来 以逗号分隔
- Oracle数据字典 和 查询表中字段的注释方法
- sql 将一个表中的查询出来的数据更新到另外一个表中
- 对于一个表中字段保存的是代码,怎么用Struts+Hibernate将名称显示出来
- JAVA WEB开发从数据库中查询到的数据用list怎么在JSP页面整齐的显示出来,请写代码,
- Oracle 把字符串分割后保存到Table的一个字段中
- 浅谈sql server把一个表中查询出来的数据插入到另外一个表中
- 将字典中的数据保存到plist文件中
- ASCII字符集
- 自定义开关View的酷炫效果(ButtonView)
- Linux下安装MySQL
- 传到服务器的 mp4 视频文件没法播放
- logback-classic 使用testCompile打包问题
- Oracle中从数据字典中查询出多条记录,保存到一个字段中显示出来
- dataTables导出Excel
- Two Sum
- double和Bigdecimal
- 关于spring task和线程池的研究
- 算法之数学自由组合问题(从M个不重复的数字中选取N个数字进行自由组合)
- 关于理解shell中 2>&1 的含义
- 递归知识
- java的逻辑左移<<,逻辑右移>>和无符号逻辑右移>>>