加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle程序

发布时间:2020-12-12 13:49:52 所属栏目:百科 来源:网络整理
导读:create or replace function gen.sample_func(owner varchar2) return varchar2 as data_t varchar2(10); cursor cur is select data_type from SYS.DBA_TAB_COLUMNS; begin open cur; dbms_output.put_line('Done'); close cur; return data_t; end sample_
create or replace function gen.sample_func(owner varchar2) return varchar2 
    as 
     data_t varchar2(10); 
      cursor cur is   select  data_type  from  SYS.DBA_TAB_COLUMNS;
      begin  
        open cur;
          dbms_output.put_line('Done'); 
        close cur; 
        return data_t;  
    end sample_func;

在编译上面的函数时,我得到以下错误

Warning: compiled but with compilation errors
Errors for FUNCTION sample_func

LINE/COL                                                                        
--------------------------------------------------------------------------------
ERROR                                                                           
--------------------------------------------------------------------------------
4/8                                                                             
PLS-00201: identifier 'DBA_TAB_COLUMNS' must be declared                        

4/8                                                                             
PL/SQL: Item ignored                                                            

7/15                                                                            
PLS-00320: the declaration of the type of this expression is incomplete or malfo
rmed                                                                            

7/8                                                                             
PL/SQL: Statement ignored

当我在游标中单独执行select语句时,我没有收到此错误.
请帮我解决这个问题.

在定义者权限存储过程(例如您正在创建的过程)中,只有在解析对象名称时才会考虑直接授予过程所有者的权限.不考虑通过角色授予的权限.我敢打赌,您的过程的所有者已被授予通过角色而不是通过直接授权访问DBA_TAB_COLUMNS视图的权限.您需要让DBA直接向拥有您的过程的用户授予对DBA_TAB_COLUMNS的访问权限.

您可以快速测试这是否实际上是您遇到的问题.在SQL * Plus中,输入命令

SQL> set role none;

然后运行SELECT语句.如果您获得相同的权限错误,那么rpoblem就是您通过角色获得授权.禁用角色意味着您的交互式会话运行时具有与存储过程一起运行的相同权限.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读