Ошибка SQL 00905. 00000 - отсутствует ключевое слово

Я пытаюсь выполнить этот запрос;

Grant SELECT on TYPE PPZ_C.BTS_BAUTEIL_STATION_INFO to PPZ_W;

и я получаю следующую ошибку:

Ошибка, начинающаяся со строки: 3 в команде - Предоставить SELECT на TYPE PPZ_C.BTS_BAUTEIL_STATION_INFO для отчета об ошибке PPZ_W - ORA-00905: отсутствует ключевое слово 00905. 00000 - «отсутствует ключевое слово» * Причина:
* Действие:

Кто-нибудь знает, какое ключевое слово мне не хватает?


person Florin    schedule 19.01.2017    source источник


Ответы (2)


Для начала нужно удалить TYPE. Это исправит вашу первую часть проблемы. Попробуйте это
Grant SELECT on PPZ_C.BTS_BAUTEIL_STATION_INFO to PPZ_W

Теперь, когда вы выполните вышеуказанное, вы получите сообщение об ошибке:

ORA-02305: для типов действительны только привилегии EXECUTE, DEBUG и UNDER.

Это означает, что вы не можете предоставить select ни одному type. Для типов допустимы только привилегии EXECUTE, DEBUG и UNDER.

Таким образом, вы можете использовать EXECUTE, когда хотите, чтобы он использовался в инструкции select:

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
person XING    schedule 19.01.2017
comment
Я то, что пользователь PPZ_W может сделать этот выбор: - person Florin; 19.01.2017
comment
ВЫБЕРИТЕ ppz_bts.na_stat_anf (bts_bauteil_station_info ('', 'IG', '12345679')) ИЗ двойного; - person Florin; 19.01.2017
comment
Какие из EXECUTE, DEBUG и UNDER мне следует использовать? - person Florin; 19.01.2017
comment
ВЫБЕРИТЕ ppz_bts.na_stat_anf (bts_bauteil_station_info ('', 'IG', '12345679')) ИЗ двойного; - person Florin; 19.01.2017
comment
Я полагаю, вы не следите за тем, на что был дан ответ. Имя схемы все еще отсутствует. Используйте это .SELECT ppz_bts.na_stat_anf( PPZ_C.BTS_BAUTEIL_STATION_INFO ('','IG','12345679') ) FROM dual; - person XING; 19.01.2017

Когда 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;
person Prashant Mishra    schedule 19.01.2017
comment
ВЫБЕРИТЕ ppz_bts.na_stat_anf (bts_bauteil_station_info ('', 'IG', '12345679')) ИЗ двойного; - person Florin; 19.01.2017
comment
Я получаю эту ошибку ORA-00904: BTS_BAUTEIL_STATION_INFO: недопустимый идентификатор 00904. 00000 -% s: недопустимый идентификатор * Причина: * Действие: Ошибка в строке: 1 Столбец: 29 - person Florin; 19.01.2017
comment
похоже, что PPZ_W все еще не имеет разрешения на этот тип - person Florin; 19.01.2017
comment
Это потому, что вы не указали схему, к которой принадлежит тип, когда вы указали на нее в операторе select (хотя вы это сделали, когда написали оператор предоставления). Вы должны называть его ppz_c.bts_bauteil_station_info, если вызываете его из другой схемы. - person Boneist; 19.01.2017