【问题标题】:SQL Error 00905. 00000 - "missing keyword"SQL 错误 00905. 00000 - “缺少关键字”
【发布时间】:2017-01-19 09:14:09
【问题描述】:

我正在尝试执行此查询;

Grant SELECT on TYPE PPZ_C.BTS_BAUTEIL_STATION_INFO to PPZ_W;

我得到以下错误:

从第 3 行开始的错误命令 - 在 TYPE 上授予 SELECT PPZ_C.BTS_BAUTEIL_STATION_INFO 到 PPZ_W 错误报告 - ORA-00905: 缺少关键字 00905. 00000 - “缺少关键字” *原因:
*行动:

有人知道我缺少什么关键字吗?

【问题讨论】:

    标签: oracle plsql keyword


    【解决方案1】:

    首先你需要删除TYPE。这将解决您的第一部分问题。 试试这个
    Grant SELECT on PPZ_C.BTS_BAUTEIL_STATION_INFO to PPZ_W

    现在当你执行上面的,你会进一步得到错误:

    ORA-02305:只有 EXECUTE、DEBUG 和 UNDER 权限对 类型

    这意味着您不能在任何type 上授予select。只有 EXECUTE、DEBUG 和 UNDER 权限对类型有效。

    因此,当您希望在 select 语句中使用 EXECUTE 时,可以使用它:

    Grant EXECUTE on PPZ_C.BTS_BAUTEIL_STATION_INFO to PPZ_W;
    

    编辑: 您的选择语句应该是:

    SELECT ppz_bts.na_stat_anf( PPZ_C.BTS_BAUTEIL_STATION_INFO ('','IG','12345679') ) FROM dual;
    

    查看演示:

    CREATE OR REPLACE TYPE myschema.array_t is varray(2) of number ; 
    
    ---Running in My schema
    SQL> select * from table(array_t('1','2'));
    
    COLUMN_VALUE
    ------------
               1
               2
    
    --Granted from myschema to otherschema
    SQL> grant execute on  myschema.array_t to othersschema ;
    
    --Running in otherschema
    
    SQL> select * from table(myschema.array_t('1','2'));
    
    COLUMN_VALUE
    ------------
               1
               2
    

    【讨论】:

    • 我认为用户 PPZ_W 能够进行此选择:
    • 从双重选择 ppz_bts.na_stat_anf(bts_bauteil_station_info('','IG','12345679'));
    • 我应该使用 EXECUTE、DEBUG 和 UNDER 中的哪一个?
    • 从双重选择 ppz_bts.na_stat_anf(bts_bauteil_station_info('','IG','12345679'));
    • 我猜你没有遵循已回答的内容。您仍然缺少架构名.. 使用此 .SELECT ppz_bts.na_stat_anf( PPZ_C.BTS_BAUTEIL_STATION_INFO ('','IG','12345679') ) FROM dual;
    【解决方案2】:

    当 Oracle 接收到类型信息的请求时,它会在提供请求的信息之前验证请求者对该类型具有 EXECUTE 权限。 试试这个:

    Grant EXECUTE on PPZ_C.BTS_BAUTEIL_STATION_INFO to PPZ_W; 
    

    那就试试吧:

    SELECT ppz_bts.na_stat_anf( PPZ_C.bts_bauteil_station_info('','IG','12345679') ) 
    FROM dual;
    

    【讨论】:

    • 从双重选择 ppz_bts.na_stat_anf(bts_bauteil_station_info('','IG','12345679'));
    • 我收到此错误 ORA-00904: "BTS_BAUTEIL_STATION_INFO": invalid identifier 00904. 00000 - "%s: invalid identifier" *原因:*操作:行错误:1 列:29
    • 看起来 PPZ_W 仍然没有该类型的权限
    • 那是因为您在 select 语句中引用类型时没有指定该类型所属的模式(尽管您在编写 grant 语句时指定了该模式)。如果您从不同的架构中调用它,则应该将其称为 ppz_c.bts_bauteil_station_info
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 2016-03-12
    • 1970-01-01
    • 2021-01-20
    • 2016-07-25
    • 1970-01-01
    • 2010-09-23
    相关资源
    最近更新 更多