Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вызов хранимки из другой хранимки, принадлежащих одной и той же схеме  [new]
Serg Kutuzov
Member

Откуда: Хабаровск
Сообщений: 43
Есть схема в БД, допустим 'schema1'. В ней определена хранимка 'StoredProc1', которая вызывает
другую хранимку 'StoredProc2' принадлежащую этой же схеме и делает запрос к таблице 'Table1',
принадлежащей этой схеме.
Исполняю хранимку 'EXEC StoredProc1' пользователем 'User1', у которого схема по умолчанию 'schema1',
всё работает нормально.
Исполняю хранимку 'EXEC schema1.StoredProc1' пользователем 'User2', у которого схема по умолчанию 'dbo',
ругается, что не может найти хранимку 'StoredProc2'.
Если я в тексте процедуры 'StoredProc1' пропишу 'EXEC schema1.StoredProc2' то вызов 'EXEC schema1.StoredProc1' пользователем 'User2', исполняется нормально. Хотя запрос к таблицам не требует указания имени схемы перед именем таблицы.

Читаю в Technet:
Квалифицированные имена внутри хранимых процедур

В пределах хранимой процедуры имена объектов, указываемые в инструкциях (например, SELECT или INSERT), которые не содержат указания схемы, по умолчанию относятся к схеме хранимой процедуры. Если пользователь, который создает хранимую процедуру, не квалифицирует имя таблицы или представления, указываемое в инструкции SELECT, INSERT, UPDATE или DELETE внутри хранимой процедуры, доступ к нему через хранимую процедуру будет по умолчанию ограничен создателем процедуры.

Т.е. я так понял, что хранимка не относится к объектам в данном описании?
Как быть, я понимаю, что можно явно указать имя схемы при обращении к хранимке. Но если я переименую имя схемы, то надо будет изменять текст хранимок. Где удобство, ведь я так понимаю схемы сделаны не только для задания правил безопасности, но и для удобства группировки объектов в БД. Или я может быть неправ?
14 сен 09, 14:54    [7655782]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимки из другой хранимки, принадлежащих одной и той же схеме  [new]
Glory
Member

Откуда:
Сообщений: 104760
У 'User2' есть права то на запуск schema1.StoredProc1 ?
14 сен 09, 15:08    [7655906]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимки из другой хранимки, принадлежащих одной и той же схеме  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Схемы были введены в первую очередь для "отделения" объектов от пользовтелей, как это было в предыдущих версиях, когда владельцем объекта был пользователь, а не схема.

Заведите себе за правило ВСЕГДА указывать схему у любого объекта бд. Этим вы не только избежите сабжевых проблем, но и сможете избежать рекомпиляции.
14 сен 09, 15:14    [7655961]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимки из другой хранимки, принадлежащих одной и той же схеме  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

да, есть такое. странно, в документации как раз таки про процедуры написано:
BOL

If a nonqualified user-defined stored procedure is specified, the Database Engine searches for the procedure in the
following order:
The sys schema of the current database.
The caller's default schema if executed in a batch or in dynamic SQL. Or, if the nonqualified procedure name appears
inside the body of another procedure definition, the schema containing this other procedure is searched next.
For
more information about default schemas, see User-Schema Separation.
The dbo schema in the current database.

http://msdn.microsoft.com/en-us/library/ms189915.aspx

но, в общем-то, +1 к сказанному: хороший стиль - всегда явно схему указывать.

Posted via ActualForum NNTP Server 1.4

14 сен 09, 15:28    [7656097]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимки из другой хранимки, принадлежащих одной и той же схеме  [new]
Serg Kutuzov
Member

Откуда: Хабаровск
Сообщений: 43
Вообщем, Microsoft опять постаралась. Зачем мне внутри процедуры, принадлежащей одной схеме, явно указывать эту схему для вызова объектов этой же схемы? Бред какой-то. Переносимость кода нулевая.
Видимо поэтому во многих БД юзают dbo.
15 сен 09, 04:53    [7658458]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимки из другой хранимки, принадлежащих одной и той же схеме  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Serg Kutuzov
Вообщем, Microsoft опять постаралась. Зачем мне внутри процедуры, принадлежащей одной схеме, явно указывать эту схему для вызова объектов этой же схемы? Бред какой-то. Переносимость кода нулевая.
Видимо поэтому во многих БД юзают dbo.


И в чем же по-Вашему заключается бред?! И что там про "переносимость кода"?
15 сен 09, 09:40    [7658809]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимки из другой хранимки, принадлежащих одной и той же схеме  [new]
Serg Kutuzov
Member

Откуда: Хабаровск
Сообщений: 43
pkarklin
Serg Kutuzov
Вообщем, Microsoft опять постаралась. Зачем мне внутри процедуры, принадлежащей одной схеме, явно указывать эту схему для вызова объектов этой же схемы? Бред какой-то. Переносимость кода нулевая.
Видимо поэтому во многих БД юзают dbo.


И в чем же по-Вашему заключается бред?! И что там про "переносимость кода"?

При повторном использовании данного блока в дургой БД с другим именем схемы я должен перелопачивать код процедур, вместо переименования имени схемы. В Oracle кстати, процедуры внутри схемы вызывают друг друга без указания имени собственной схемы.
Можно провести сравнение с namespace в С++ (не совсем правда корректную), но всё таки. Я внутри namespace при обращении к объектам, принадлежащим этой же области не должен указывать явно её имя. Иначе смысл ( и удобство пользования) сим понятием теряется.
15 сен 09, 09:51    [7658849]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимки из другой хранимки, принадлежащих одной и той же схеме  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
Serg Kutuzov
Иначе смысл ( и удобство пользования) сим понятием теряется.


Коллега вы забыли добавить IMHO)))
15 сен 09, 10:08    [7658954]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимки из другой хранимки, принадлежащих одной и той же схеме  [new]
Glory
Member

Откуда:
Сообщений: 104760
Serg Kutuzov
pkarklin
Serg Kutuzov
Вообщем, Microsoft опять постаралась. Зачем мне внутри процедуры, принадлежащей одной схеме, явно указывать эту схему для вызова объектов этой же схемы? Бред какой-то. Переносимость кода нулевая.
Видимо поэтому во многих БД юзают dbo.


И в чем же по-Вашему заключается бред?! И что там про "переносимость кода"?

При повторном использовании данного блока в дургой БД с другим именем схемы я должен перелопачивать код процедур, вместо переименования имени схемы. В Oracle кстати, процедуры внутри схемы вызывают друг друга без указания имени собственной схемы.

То, что вы не указываете имя схемы, не значит, что Oracle не парится, самостоятельно выясняя это имя. Да, вам так было удобнее в Оракл, но это не значит, что ваш подход правильный
15 сен 09, 10:14    [7658995]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимки из другой хранимки, принадлежащих одной и той же схеме  [new]
Serg Kutuzov
Member

Откуда: Хабаровск
Сообщений: 43
Да, в догонку предыдущим оппонентам - всё это IMHO.
Мне удобней не перелопачивать уже созданный код, а применять его повторно с минимальными переделками. Потому что я смогу тогда сделать больше, т.е. работать продуктивней.
И люди, использующие мой код повторно не будут плеваться (по крайней мере на меня).
По поводу "Oracle не парится" - программный продукт (ПП) создаётся для человека, а не наоборот. Програмный продукт должен облегчать работу пользователя, программиста и т.д.
И в конце-то концов, как правильно указал выше Daw, http://msdn.microsoft.com/en-us/library/ms189915.aspx у компании Microsoft описание функций ПП расходятся с действительностью, что вводит в заблуждение людей, которые этот программный продукт используют.
Поэтому, закрываем тему. Иначе обсуждение перерастёт во флейм.
15 сен 09, 11:14    [7659478]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить