Oracle SQL错误00905。00000-“第;缺少关键字";

Oracle SQL错误00905。00000-“第;缺少关键字";,oracle,plsql,keyword,Oracle,Plsql,Keyword,我正在尝试执行此查询 Grant SELECT on TYPE PPZ_C.BTS_BAUTEIL_STATION_INFO to PPZ_W; 我得到以下错误: 从命令中的第3行开始出错-授予选择类型的权限 PPZ_C.BTS_BAUTEIL_站信息至PPZ_W错误报告-ORA-00905: 缺少关键字 90500000-“缺少关键字” *原因: *行动: 有人知道我遗漏了什么关键字吗?首先,您需要删除类型。这将解决问题的第一部分。 试试这个 将PPZ_C.BTS_BAUTEIL_站点上的选

我正在尝试执行此查询

Grant SELECT on TYPE PPZ_C.BTS_BAUTEIL_STATION_INFO to PPZ_W;
我得到以下错误:

从命令中的第3行开始出错-授予选择类型的权限 PPZ_C.BTS_BAUTEIL_站信息至PPZ_W错误报告-ORA-00905: 缺少关键字 90500000-“缺少关键字” *原因:
*行动:


有人知道我遗漏了什么关键字吗?

首先,您需要删除
类型。这将解决问题的第一部分。
试试这个
将PPZ_C.BTS_BAUTEIL_站点上的选择信息授予PPZ_W

现在,当您执行上述操作时,您将进一步得到错误:

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

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

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

Grant EXECUTE on PPZ_C.BTS_BAUTEIL_STATION_INFO to PPZ_W;
编辑: 您的select语句应该是:

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_C.BTS_BAUTEIL_站点上的选择信息授予PPZ_W

现在,当您执行上述操作时,您将进一步得到错误:

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

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

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

Grant EXECUTE on PPZ_C.BTS_BAUTEIL_STATION_INFO to PPZ_W;
编辑: 您的select语句应该是:

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

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

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;

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

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;

我希望用户能够选择什么:从dual中选择PPZ_bts.na_stat_anf(bts_bauteil_station_info(“”,'IG','12345679');我应该使用EXECUTE、DEBUG和DOWN中的哪一个?从dual中选择ppz_bts.na_stat_anf(bts_bauteil_station_info(“”,'IG','12345679');我猜你没有按照回答的去做。你还没找到这个计划名。。使用此选项。
从dual中选择ppz_bts.na_stat_anf(ppz_C.bts_BAUTEIL_STATION_信息('','IG','12345679')用户PPZ_W能够进行此选择的内容:从dual中选择PPZ_bts.na_stat_anf(bts_bauteil_station_info(“”,'IG','12345679');我应该使用EXECUTE、DEBUG和DOWN中的哪一个?从dual中选择ppz_bts.na_stat_anf(bts_bauteil_station_info(“”,'IG','12345679');我猜你没有按照回答的去做。你还没找到这个计划名。。使用此选项。
从dual中选择ppz_bts.na_stat_anf(ppz_C.bts_BAUTEIL_STATION_信息('','IG','12345679')从双重模式中选择ppz_bts.na_stat_anf(bts_bauteil_station_info('','IG','12345679');我得到这个错误ORA-00904:“BTS\u BAUTEIL\u STATION\u INFO”:无效标识符00904。00000-“%s:无效标识符”*原因:*操作:第1行第29列处的错误看起来PPZ_W仍然没有对该类型的引用,这是因为在select语句中引用该类型时未指定该类型所属的架构(尽管在编写grant语句时指定了该架构)。如果您是从不同的模式调用它,则应将其称为
ppz_c.bts_bauteil_station_info
。从dual中选择ppz_bts.na_stat_anf(bts_bauteil_station_info(“”,'IG','12345679');我得到这个错误ORA-00904:“BTS\u BAUTEIL\u STATION\u INFO”:无效标识符00904。00000-“%s:无效标识符”*原因:*操作:第1行第29列处的错误看起来PPZ_W仍然没有对该类型的引用,这是因为在select语句中引用该类型时未指定该类型所属的架构(尽管在编写grant语句时指定了该架构)。如果从不同的模式调用,则应将其称为
ppz_c.bts\u bauteil\u station\u info