Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.015 c
1-19626
Step[B.M.]
2003-03-23 03:26
2003.04.07
DLL. Проблемы с строковыми типами.


7-19902
Alex Shulg
2003-02-14 09:32
2003.04.07
NT Service & CreateProcess


7-19891
Stan
2003-02-11 00:33
2003.04.07
Работа с реестром


6-19713
Hamlet
2003-01-09 15:17
2003.04.07
адресная книга The Bat!


4-19920
xZero
2003-02-09 00:15
2003.04.07
PE




   Наверх