create view过程中遇到的ora-01031、ORA-00998错误

SQL> --创建视图
SQL> create or replace view stats
SQL> as
SQL>   select 'STAT...'||a.name,b.value
SQL>   from v$statname a,v$mystat b
SQL>   where a.STATISTIC#=b.STATISTIC#
SQL>   union all
SQL>   select 'LATCH.'||name,gets
SQL>   from v$latch
SQL>   union all
SQL>   select 'STAT...Elapsed Time',hsecs
SQL>   from v$timer;

create or replace view stats
as
  select 'STAT...'||a.name,b.value
  from v$statname a,v$mystat b
  where a.STATISTIC#=b.STATISTIC#
  union all
  select 'LATCH.'||name,gets
  from v$latch
  union all
  select 'STAT...Elapsed Time',hsecs
  from v$timer;
ora-01031:insufficient privileges

SQL> select * from user_tab_privs_recd;
 
OWNER                          TABLE_NAME                     GRANTOR                        PRIVILEGE                                GRANTABLE HIERARCHY
------------------------------ ------------------------------ ------------------------------ ---------------------------------------- --------- ---------
SYS                            V_$LATCH                       SYS                            SELECT                                   NO        NO
SYS                            V_$STATNAME                    SYS                            SELECT                                   NO        NO
SYS                            V_$TIMER                       SYS                            SELECT                                   NO        NO

SQL> --根据查询结果可知用户没有v_$mystat的select权限,故
SQL> grant select on v_$mystat to scott;

SQL> --创建视图
SQL> create or replace view stats
SQL> as
SQL>   select 'STAT...'||a.name,b.value
SQL>   from v$statname a,v$mystat b
SQL>   where a.STATISTIC#=b.STATISTIC#
SQL>   union all
SQL>   select 'LATCH.'||name,gets
SQL>   from v$latch
SQL>   union all
SQL>   select 'STAT...Elapsed Time',hsecs
SQL>   from v$timer;

create or replace view stats
as
  select 'STAT...'||a.name,b.value
  from v$statname a,v$mystat b
  where a.STATISTIC#=b.STATISTIC#
  union all
  select 'LATCH.'||name,gets
  from v$latch
  union all
  select 'STAT...Elapsed Time',hsecs
  from v$timer;
ORA-00998: must name this expression with a column alias

SQL> --修改视图,为'STAT...'||a.name as一个别名
SQL> create or replace view stats
SQL> as
SQL>   select 'STAT...'||a.name as name,b.value
SQL>   from v$statname a,v$mystat b
SQL>   where a.STATISTIC#=b.STATISTIC#
SQL>   union all
SQL>   select 'LATCH.'||name,gets
SQL>   from v$latch
SQL>   union all
SQL>   select 'STAT...Elapsed Time',hsecs
SQL>   from v$timer;
 
Create succeeded
 
总结:1.v$statname、v$mystat、v$latch和v$timer分别是对象v_$statname、v_$mystat、v_$latch和v_$timer的同义词,因此创建视图时需要sys用户直接授予用户select的权限,即创建视图时对象的权限不可继承;
2.创建视图时,类似'STAT...'||a.name等拼接或函数的列名,必须派生字段别名。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值