« Google的新玩具:Webaccelerator | Blog首页 | Why "EXECUTE ANY PROCEDURE" is a dangerous PRIVILEGE? »
What's mean ORA-25191?
作者:eygle | 【转载请注出处】|【云和恩墨 领先的zData数据库一体机 | zCloud PaaS云管平台 | SQM SQL审核平台 | ZDBM 数据库备份一体机】
链接:https://www.eygle.com/archives/2005/05/whats_mean_ora2.html
在参考了Using DBMS_SYS_SQL Package to grant Privilege留言板里有朋友继续问道,出现了以下错误:链接:https://www.eygle.com/archives/2005/05/whats_mean_ora2.html
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,那么接下来的就简单了,只要把我们之前的过程简单修改一下:
这样就可以了.
历史上的今天...
>> 2020-05-09文章:
>> 2011-05-09文章:
>> 2008-05-09文章:
>> 2007-05-09文章:
>> 2006-05-09文章:
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; / |
这样就可以了.
历史上的今天...
>> 2020-05-09文章:
>> 2011-05-09文章:
>> 2008-05-09文章:
>> 2007-05-09文章:
>> 2006-05-09文章:
By eygle on 2005-05-09 20:24 | Comments (0) | SQL.PLSQL | 280 |