create or replace function work_plan_mask (p_schema VARCHAR2,p_table VARCHAR2)

  return Varchar2 AS  -- 数据控制,指定某些人只能查看他权限范围内的信息

     v_predicate  VARCHAR2(1000) := '1=2';
v_personcode Personnel.Person_Code%TYPE := SYS_CONTEXT(get_context_name,'PERSON_CODE');
v_user_name work_plan.reporter%type := SYS_CONTEXT(get_context_name,'APP_USER_NAME'); -- 获取当前账号
v_number NUMBER; cursor get_work_plan_role is
select count(*)
from application_roles
WHERE role_name = 'work_plan_search' AND username = v_user_name; -- work_plan_search:系统里(给了权限)的角色 BEGIN IF v_personcode in('','') THEN -- 指定这几个人可看
RETURN '1=1'; -- 返回 true
END IF; insert into person_code_temp -- 将下面查询出来的结果插入person_code_temp(临时表)表中
SELECT p.PERSON_CODE -- 树状查询 (查出当前编号以及下一级、下下一级...等 编号,比如:总经理以及所有下属的编号)
FROM PERSONNEL p
CONNECT BY p.MANAGER = PRIOR p.PERSON_CODE
START WITH p.PERSON_CODE = v_personcode; open get_work_plan_role;
fetch get_work_plan_role into v_number;
close get_work_plan_role; v_predicate := 'reporter = ''' || v_user_name || ''' OR ' || v_number || ' > 0 ' ||
' OR INSERT_USER = ''' || v_user_name || '''' ||
' OR INSERT_USER IN ( SELECT get_username(P.PERSON_CODE) FROM person_code_temp P)'; RETURN v_predicate;
end work_plan_mask;

注:如需测试该函数,请复制到Oracle数据库中,右击函数名“work_plan_mask”,选择“test” 进行测试,测试时记得把相应的表名及字段换成自己建立的

这个函数 SYS_CONTEXT(),可以参考 http://blog.csdn.net/rfb0204421/article/details/7861332  或  http://blog.csdn.net/kadwf123/article/details/8065673

原创作者:DSHORE

出处:http://www.cnblogs.com/dshore123/

欢迎转载,转载务必说明出处。(如果本文对你有用,可以点击一下右下角的 推荐,谢谢!

Oracle 函数 “数据控制,指定某些人只能查看他权限范围内的信息”的更多相关文章

  1. Oracle使用游标查询指定数据表的所有字段名称组合而成的字符串

    应用场合:参考网上查询数据表的所有字段名代码,使用游标生成指定单个表的所有字段名跟逗号组成的用于select  逗号隔开的字段名列表 from字符串等场合. 查询结果输出如下: 当前数据表TB_UD_ ...

  2. Oracle生成查询包含指定字段名对应的所有数据表记录语句

    应用场合:已知字段名字,查询数据库中所有数据表中包含该字段名的所有数据表 操作办法:指定字段名,数据库表用户,执行下面查询语句即可 --Oracle生成查询包含指定字段名对应的所有数据表记录语句 de ...

  3. 查看Oracle表中的指定记录在数据文件中的位置

    查看Oracle表中的指定记录位置select rowid,user_id from sshr.xx_user where user_id=3010586 select rowid,       db ...

  4. 关于 Oracle 的数据导入导出及 Sql Loader (sqlldr) 的用法

    在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几种方法: 1. A 表的记录导出为一条条分号隔开的 insert 语句,然后执行插入到 B 表中2. 建立数据库间的 ...

  5. Oracle函数面试题

    1.对字符串操作的函数? 答:ASCII() –函数返回字符表达式最左端字符的ASCII 码值 CHR() –函数用于将ASCII 码转换为字符 –如果没有输入0 ~ 255 之间的ASCII 码值C ...

  6. oracle函数操作

    感于总有些网友提出一些非常基础的问题,比如有没有实现某某功能的函数啊,某某函数是做什么用的啊,格式是什么等等,同时也感受到自己对oracle函数认识的不足,于是集中月余时间专注于oracle函数,小有 ...

  7. Oracle 创建数据表

    数据库中的每一个表都被一个模式(或用户)所拥有,因此表是一种典型的模式对象.在创建数据表时,Oracle 将在一个指定的表空间中为其分配存储空间.最初创建的表时一个空的逻辑存储结构,其中不包含任何数据 ...

  8. Oracle基础 数据泵导出/导入Expdp/impdp(转)

    一.EXPDP和IMPDP使用说明 Oracle Database 10g引入了最新的数据泵(Data Dump)技术,数据泵导出导入(EXPDP和IMPDP)的作用 1)实现逻辑备份和逻辑恢复. 2 ...

  9. 开发Oracle 函数

    函数用于返回特定的数据.如果在应用程序中,经常需要执行SQL语句来返回特定数据,那么可以基于这些操作建立特定的函数.建立函数的语法如下: CREATE [OR REPLACE] FUNCTION fu ...

随机推荐

  1. Java考试题之六

    QUESTION 134 Given:11. class Snoochy {12. Boochy booch;13. public Snoochy() { booch = new Boochy(thi ...

  2. md5sum命令行使用注意事项

    Linux下md5sum命令可以直接计算标准输入的hash值,使用方式为 echo -n '123456' | md5sum 注意给echo加上-n表示在尾部不加换行 命令行示例 $ echo -n ...

  3. mysql 5.7 json 字段类型查找、修改

    修改 json 里的数组字段 mysql> set @json = '{"test": [{"name": "laravel"}, { ...

  4. python map对象

    工作中遇到需要将List对象中的元素(list类型)转化为集合(set)类型,转化完成之后需要需要访问其中的元素. 第一步,使用map方法进行转换 data = [[1, 3, 4], [2, 3, ...

  5. python【数据类型:集合】

  6. 总结: 《jQuery基础教程》 5-完结

    第5章:操作DOM HTML属性和DOM属性:attr()和prop() 获取表单控件的值:val() DOM操作方法的归纳: (1) 要在HTML中创建新元素,使用$()函数.(2) 要在每个匹配的 ...

  7. 详解 Cookie 纪要(vue.cookie,jquery.cookie简化)

    今天看到一篇cookie的文章,写的特别详细,感谢 晚晴幽草轩 的分享,原文链接http://www.jeffjade.com/2016/10/31/115-summary-of-cookie/ 原文 ...

  8. HTTP请求方式及状态码

  9. Android的音频解码原来是直接调用的本地C方法直接通过硬件解码

    Android就是披着JAVA外衣的C啊~音频解码原来是直接调用的本地C方法直接通过硬件解码的,JAVA和C的字节数组存放模式不同(java是大端,C根据不同平台不同),不同格式需要转化以后才能用. ...

  10. 全链路追踪traceId,ThreadLocal与ExecutorService

    关于全链路追踪traceId遇到线程池的问题,做过架构的估计都遇到过,现在以写个demo,总体思想就是获取父线程traceId,给子线程,子线程用完移除掉. mac上的chrome时不时崩溃,写了一大 ...