Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.07;
Скачать: CL | DM;

Вниз

Вопрос к знатокам динамического SQL   Найти похожие ветки 

 
ilandrei ©   (2003-03-18 15:14) [0]

Народ, помогите разобраться!
Есть у меня вот такая процедура

create or replace procedure SQLCursor(curss out TypeDef.c_type, vSQL Varchar2) is
begin
OPEN curss FOR vSQL;
end;

Задача этой процедуры - вернуть ссылку на курсор.
Так вот, если я в качестве параметра передаю запрос, в котором участвуют таблицы моей схемы, то все ОК, если же в запрос входит таблица чужой схемы, то, несмотря на наличие синонима и прав доступа, процедура генерит ошибку ORA-00942 (Table or view doesn"t exist)
Тот же самый запрос в статическом SQL выполняется нормально.
Может быть, кто-то знает, где тут собака порылась?


 
Val ©   (2003-03-18 15:22) [1]

а если напрямую указывать имя_схемы.имя_таблицы?


 
ilandrei ©   (2003-03-18 15:30) [2]

Не помогает!


 
Val ©   (2003-03-18 15:45) [3]

хм. может быть ругань идет на vSQL? именно vSQL воспринимается как таблица или view?может использовать следующую конструкцию?
execute immediate "OPEN curss FOR "||vSQL;


 
ilandrei ©   (2003-03-18 15:52) [4]

To Val:

Да нет, если бы ругань была из-за переменной, то она бы не зависела от ее содержимого.
Я попробовал так, как Вы предлагаете, и вот теперь-то ругань идет как раз независимо от параметров: invalid SQL statement



 
Val ©   (2003-03-18 17:07) [5]

да, я не прав.но вы говорите, что запрос выполняется и не выполняется только в процедуре и только при передаче в виде параметра? может быть стоит у4достоверится действительно ли передается то что нужно?


 
ilandrei ©   (2003-03-18 18:45) [6]

Отвечаю себе сам :)
Для того, чтобы это работало, нужно, чтобы GRANT на SELECT был передан непосредственно, а не через роль. Полдня угробил, пока разобрался...


 
ilandrei ©   (2003-03-18 18:53) [7]

Вдогонку - если кому-то еще будет интересна эта тема.
Чтобы не грантовать отдельно каждую таблицу, сойдет команда grant all privileges to <имя пользователя>. Еще один вариант - можно поместить процедуру, открывающую этот проблемный курсор, в схему SYS. Так тоже работает - проверено!


 
Val ©   (2003-03-18 18:57) [8]

:) рад за вас, согласитесь, фраза несмотря на наличие синонима и прав доступа об этом не упоминает :)


 
Val ©   (2003-03-18 19:56) [9]

>ilandrei © (18.03.03 18:53)
сойдет команда grant all privileges...
но, не будет ли это разрушением схемы безопасности?


 
ilandrei ©   (2003-03-18 20:24) [10]

To Val:
> :) рад за вас, согласитесь, фраза несмотря на наличие синонима и прав доступа об этом не упоминает :)

Нет, не упоминает. Поскольку все необходимые права доступа были изначально переданы через роль - для статического SQL и PL/SQL достаточно, а вот для динамического, как выяснилось, нет!
А про схему безопасности - тут уж каждый для себя волен решать, что ему подходит, что нет - я лишь поспешил поделиться с публикой найденным решением собственной проблемы :)



Страницы: 1 вся ветка

Текущий архив: 2003.04.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
1-19606
[BAD]Angel
2003-03-26 11:39
2003.04.07
Удаление элементов из ListBox


3-19410
Askik
2003-03-17 16:48
2003.04.07
Можно ли соединить два запроса


1-19619
Opera
2003-03-25 12:33
2003.04.07
Прилипание


14-19758
FVlad
2003-03-16 21:33
2003.04.07
Электронные книги


14-19810
iNew
2003-03-20 09:19
2003.04.07
Подскажите где взять хороший компонент для проверки CRC,