eygle.com   eygle.com
eygle.com  
 

« Google的新玩具:Webaccelerator | Blog首页 | Why "EXECUTE ANY PROCEDURE" is a dangerous PRIVILEGE? »

What's mean ORA-25191?

作者:eygle |【转载时请务必以超链接形式标明文章和作者信息及本声明
链接:
站内相关文章|Related Articles
在参考了Using DBMS_SYS_SQL Package to grant Privilege留言板里有朋友继续问道,出现了以下错误:
ORA-25191: cannot reference overflow table of an index-organized table 
ORA-06512: at "SYS.DBMS_SYS_SQL", line 1474 
ORA-06512: at line 9 

查一下Oracle手册,我们看到:
ORA-25191 cannot reference overflow table of an index-organized table

Cause: An attempt was made to directly access the overflow table of an index-organized table.
Action: Issue the statement against the parent index-organized table containing the specified overflow table.


意思是说,对于Overflow的IOT表,只需要对父表进行授权即可。简单动手自己试试看也可以:
SQL> connect eygle/eygle
Connected.
SQL> CREATE TABLE TEST_IOT
  2        (id NUMBER PRIMARY KEY,
  3         C1 VARCHAR2(50),
  4         C2 VARCHAR2(10))
  5        ORGANIZATION INDEX PCTTHRESHOLD  10 OVERFLOW;

Table created.

SQL> col object_name for a30
SQL> select object_name,object_type from user_objects where object_name like '%IOT%';

OBJECT_NAME                    OBJECT_TYPE
------------------------------ ------------------
SYS_IOT_OVER_7370              TABLE
SYS_IOT_TOP_7370               INDEX
TEST_IOT                       TABLE

SQL> grant select on SYS_IOT_OVER_7370 to scott;
grant select on SYS_IOT_OVER_7370 to scott
                *
ERROR at line 1:
ORA-25191: cannot reference overflow table of an index-organized table

SQL> 

Ok,那么接下来的就简单了,只要把我们之前的过程简单修改一下:
declare 
sqltext varchar2(200); 
c integer; 
begin 
for userlist in (select user_id,username from all_users where username not in ('SYS','SYSTEM','EYGLE')) loop 
for tablelist in (select owner,table_name from dba_tables where owner = userlist.username and table_name not like '%IOT_OVER%') loop 
sqltext := 'grant all on '||tablelist.owner||'.'||tablelist.table_name ||' to eygle with grant option'; 
c := sys.dbms_sys_sql.open_cursor(); 
sys.dbms_sys_sql.parse_as_user( c,sqltext,dbms_sql.native,userlist.user_id); 
sys.dbms_sys_sql.close_cursor(c); 
end loop; 
end loop; 
end; 
/ 

这样就可以了.
-----
这篇 【What's mean ORA-25191?】来自 www.eygle.com | CSDN技术网摘| del.icio.us|365Key

By eygle on 2005-05-09 20:24 | Comments (0) | Posted to SQL.PLSQL | Edit |Pageviews:

相关文章 随机文章
修改默认的undo_retention参数设置
Oracle ACE China的一个小小聚会
使用dbms_rectifier_diff解决高级复制中的数据冲突问题
2006年 我们有更多的时间能浪费
改版www.eygle.com主页
网上相关主题:
Google

留言 (0)

发表留言:



Remember Me?
(输入验证码后方可评论,谢谢支持)



CopyRight © 2004 eygle.com, All rights reserved.