Гость
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как задать текущее имя схемы в хранимой процедуре. / 12 сообщений из 12, страница 1 из 1
11.10.2013, 14:35
    #38424500
shurf89
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать текущее имя схемы в хранимой процедуре.
Есть процедура делающая выборку данных из неких таблиц.
Есть несколько схем содержащих эти таблицы.
В зависимости от параметра нужно чтобы процедура выбирала данные из определённой схемы.

в оракле нашел такое ALTER SESSION SET CURRENT_SCHEMA.

Как это сделать для Adaptive Server Enterprise/12.5.3?
...
Рейтинг: 0 / 0
11.10.2013, 15:25
    #38424582
Nashville
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать текущее имя схемы в хранимой процедуре.
shurf89,

Век живи, век учись! С удовольствием и я послушаю!
...
Рейтинг: 0 / 0
11.10.2013, 18:25
    #38424872
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать текущее имя схемы в хранимой процедуре.
примерно так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create procedure aaaa
    @schema int
as
   create table #rep(...)

   if @schema = 1 
   begin
        insert into #rep select * from table1
        ....
    end else if @schema = 2
   begin
        insert into #rep select * from table2
        ....
    end else begin
        insert into #rep select * from table3
        ....
    end

    update #rep ....
    select * from #rep
go
...
Рейтинг: 0 / 0
12.10.2013, 07:40
    #38425103
Nashville
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать текущее имя схемы в хранимой процедуре.
White Owlпримерно так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create procedure aaaa
    @schema int
as
   create table #rep(...)

   if @schema = 1 
   begin
        insert into #rep select * from table1
        ....
    end else if @schema = 2
   begin
        insert into #rep select * from table2
        ....
    end else begin
        insert into #rep select * from table3
        ....
    end

    update #rep ....
    select * from #rep
go



Какой хитрый! А где указание схемы где расположены таблицы table1, table2 и table3?
...
Рейтинг: 0 / 0
12.10.2013, 09:27
    #38425114
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать текущее имя схемы в хранимой процедуре.
NashvilleКакой хитрый! А где указание схемы где расположены таблицы table1, table2 и table3?С одной стороны - нигде. В ASE нету "схем". Вообще нету.
Но с другой стороны - они там же где и в Oracle: user1.table1, user2.table1 и тд. Только в ASE это называется "владелец таблицы" а не "схема".
Некоторая разница между этими понятиями все-же есть, но очень маленькая и с практической точки зрения ты ее не увидишь еще очень долго.
...
Рейтинг: 0 / 0
12.10.2013, 23:08
    #38425379
Nashville
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать текущее имя схемы в хранимой процедуре.
White Owl,

Ну вот, дал еще один повод Ораклолюбам для гордости:)
...
Рейтинг: 0 / 0
13.10.2013, 10:57
    #38425533
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать текущее имя схемы в хранимой процедуре.
shurf89, дурость это.
Во-первых так не сделать а почти никак. Во вторых, если сделать, то почти все преимущества хранимых процедур сводятся на нет.

Делать надо через динамический Exec, но при этом пользователю нужно давать все нужные права непосредственно на таблицы.

А по хорошему надо сливать все бд в одну и после жить долго и счастливо.
...
Рейтинг: 0 / 0
14.10.2013, 10:36
    #38426153
shurf89
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать текущее имя схемы в хранимой процедуре.
Структура не выбиралась.Остановлюсь на динамическом exec.Как я понял это нужно для каждой схемы создавать одинаковую процедуру а потом просто выбирать с каким use вызывать?
...
Рейтинг: 0 / 0
14.10.2013, 10:49
    #38426179
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать текущее имя схемы в хранимой процедуре.
shurf89,

Расскажи же, что ты понимаешь под словом "схема" ?

Нет схем в ASE.

Приведи DDL и код процедур.

Структура не выбиралась -- значит начинай выбирать.
Ты программист или бревно ?

авторОстановлюсь на динамическом exec.Как я понял это нужно для каждой схемы создавать одинаковую процедуру а потом просто выбирать с каким use вызывать?

Ну, можно кстати ещё сделать и так -- создать в каждой БД по процедуре (возможно, текст будет одинаков),
а потом из главной БД вызвать по IF -ам или через EXEC @ уже процедуру из нужной БД.

Если конечно "схема" -- это база данных, а не владелец объекта, как предположил WhiteOwl
...
Рейтинг: 0 / 0
14.10.2013, 12:52
    #38426439
shurf89
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать текущее имя схемы в хранимой процедуре.
MasterZiv,

Схема - это БД.
А по поводу бревна это вы зря или просто не попадали в такие ситуации.
Структура сформировалась довольно давно и наверное на то были причины (давно это было).Этой структурой пользуюсь далеко не один я и программный комплекс.Если бы имел возможность всё подогнать под одну задачу так бы и поступил или создал тему соответствующею.

Спасибо за помощь.
...
Рейтинг: 0 / 0
14.10.2013, 15:25
    #38426774
blzz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать текущее имя схемы в хранимой процедуре.
shurf89,

OMFG, какие у вас потребности... можете загонять в переменную dynamic sql делать use, а потом проверять db_name().
есть конечно вариантик типа положить процедуру в sybsystemprocs
с префиксом sp_

вызывать её из нужной базы.

create procedure sp_example_multi_db_proc
as select db_name() as schema_name , name from sysobjects
go
grant execute on sp_example_multi_db_proc to public

use master
go
exec rssd..sp_example_multi_db_proc -- дает список объектов из rssd
go

exec model..sp_example_multi_db_proc -- дает список объектов из model
go

но хз, насколько хорошее это будет решение в продакшоне.
...
Рейтинг: 0 / 0
14.10.2013, 16:33
    #38426893
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать текущее имя схемы в хранимой процедуре.
blzz,

USE делать не нужно, бессмысленно просто.
Можно тупо ссылаться на нужные таблицы или процедуры по полному имени объекта.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как задать текущее имя схемы в хранимой процедуре. / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]