|
|
|
Процедура со свойствами системной
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Существует идея и, к сожалению, моих знаний для точного ответа: возможно или нет - не хватает. Немогли бы Вы посоветовать. Ситуация: Существует множество баз одинаковых по смыслу и разбитых по принадлежности к региону, например. Интересующие таблицы называются во всех базах одинаково и несут одинаковую смысловую нагрузку. На данный момент существует во всех базах одинаковые процедуры, которые необходимо одновременно менять при "изменении политики партии". Идея: Отказаться от кучи одинаковых процедур и сделать всего одну с изменяемыми параметрами. Заковырка: Создать отдельную базу и процедуры перенести туда не проблема. Проблема где будет выполняться данная процедура( точнее где будет её лог )? Девайсы логов и кешей отданы полностью под те одинаковые базы и распределены в зависимости от значимости. Есть идея создать а-ля системную процедуру, которую можно вызвать из любой базы, но её код хранится в единичном экземпляре. Минусы: захламление sybsystemprocs и использование exec, что затрудняет восприятие кода( либо делать пустышки, что еще хуже ) Вопрос: Можно ли реализовать идею, не захломляя sybsystemprocs? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2009, 11:28 |
|
||
|
Процедура со свойствами системной
|
|||
|---|---|---|---|
|
#18+
Пордон, используется ASE 12.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2009, 11:39 |
|
||
|
Процедура со свойствами системной
|
|||
|---|---|---|---|
|
#18+
big-n-green пишет: > Заковырка: > Создать отдельную базу и процедуры перенести туда не проблема. Проблема > где будет выполняться данная процедура( точнее где будет её лог )? А это не зависит от того, где лежит процедура. Это зависит от того, где лежат таблицы, которые она меняет. > системную процедуру, которую можно вызвать из любой базы, но её код > хранится в единичном экземпляре. На самом деле "системная процедура" очень проста. Все процедуры, название которых начинается с "sp_", ищутся не только в текущей БД, но и в sybsystemprocs. Вот только не помню, где сначала, и только ли в sybsystemprocs. (можно прочитать в документации). Более ничем "системная процедура" не примечательна/особенна. Минусы: захламление sybsystemprocs и А что в этом плохого ? Ничего. > использование exec, что затрудняет восприятие кода( либо делать > пустышки, что еще хуже ) Это вот я не понял. > Вопрос: > Можно ли реализовать идею, не захломляя sybsystemprocs? Наверное, нет. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2009, 12:30 |
|
||
|
Процедура со свойствами системной
|
|||
|---|---|---|---|
|
#18+
big-n-green, не вижу проблем в обновлении процедур в нескольких БД "почти" одновременно можно не захламлять sybsystemprocs а захламить, например, master ;) или создайте БД common, откуда и дергайте вашу общую процу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2009, 12:39 |
|
||
|
Процедура со свойствами системной
|
|||
|---|---|---|---|
|
#18+
komrad пишет: > или создайте БД common, откуда и дергайте вашу общую процу Только для вызова процедуры из бд common придётся явно задавать имя процедуры с полным путём, с префиксом , напр: exec common..my_cool_proc Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2009, 13:16 |
|
||
|
Процедура со свойствами системной
|
|||
|---|---|---|---|
|
#18+
MasterZiv, так оно и есть как вариант: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2009, 13:34 |
|
||
|
Процедура со свойствами системной
|
|||
|---|---|---|---|
|
#18+
Спасибо за советы. MasterZiv: >А это не зависит от того, где лежит процедура. Это зависит от того, где >лежат таблицы, которые она меняет. Т.е. если процедура лежит у меня в db1, а искомые таблицы в db2..dbN То будут использоваться только их логи db2..dbN и db1 не будет затронута? >А что в этом плохого ? Ничего. Понятно, спасибо. >> использование exec, что затрудняет восприятие кода( либо делать >> пустышки, что еще хуже ) >Это вот я не понял. Немного наверно криво сказал, попробую привести пример: Возьмем абстрактную процедуру: create proc sp_proc1 as BEGIN select * into tmp_table from table1 where .... update tmp_table .... insert into table2 from tmp_table END Её можно будет собрать в базе sybsystemprocs только в случае присутствия таблиц: table1, tmp_table, table2 либо создать процедуру так: create proc sp_proc1 as BEGIN exec( ' select * into tmp_table from table1 where .... update tmp_table .... insert into table2 from tmp_table ' ) END Если будет тем или иным способом создана процедура, то при вызовах: exec db1..sp_proc1 exec db2..sp_proc1 exec db3..sp_proc1 Будут использоваться таблицы соответствующих баз. komrad: Да, такой способ будет работать, но Ваша cool_proc будет динамической через exec? Вообщем-то примерно так пока и работает просто если код процедуры очень большой, то анализ такой процедуры со всеми вставками получается неимоверным. Еще раз спасибо за советы, будем пробовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2009, 15:17 |
|
||
|
Процедура со свойствами системной
|
|||
|---|---|---|---|
|
#18+
big-n-green komrad: Да, такой способ будет работать, но Ваша cool_proc будет динамической через exec? а Код: plaintext тоже динамическая? ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2009, 15:21 |
|
||
|
Процедура со свойствами системной
|
|||
|---|---|---|---|
|
#18+
komradbig-n-green komrad: Да, такой способ будет работать, но Ваша cool_proc будет динамической через exec? а Код: plaintext тоже динамическая? ;) Видимо теперь я не понял. Давайте возьмем пример. На данный момент есть в каждой базе процедура: Код: plaintext 1. 2. 3. 4. 5. Если сделать как Вы предлагаете, то возможен только такой вариант: В каждой базе создается процедура: Код: plaintext 1. 2. 3. 4. 5. 6. 7. в базе common создается процедура: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Я не совсем понял как код sp_who, где используется таблицы базы master может помочь. Можете пояснить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2009, 15:42 |
|
||
|
Процедура со свойствами системной
|
|||
|---|---|---|---|
|
#18+
big-n-green Я не совсем понял как код sp_who, где используется таблицы базы master может помочь. Можете пояснить? это был вопрос-шутка не стоит путать exec proc и exec ('....') - это разные вещи второе - динамический sql первое - способ запуска процедур ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2009, 15:48 |
|
||
|
Процедура со свойствами системной
|
|||
|---|---|---|---|
|
#18+
big-n-green пишет: > > Т.е. если процедура лежит у меня в db1, а искомые таблицы в db2..dbN То > будут использоваться только их логи db2..dbN и db1 не будет затронута? Что значит "затронута" ? > Её можно будет собрать в базе sybsystemprocs только в случае присутствия > таблиц: table1, tmp_table, table2 Так нет, вы должны будете указывать полные имена этих таблиц, из другой БД. НО ОДНОЙ ! Вот я и не понимаю, как вы это собираетесь делать. Т.е. как одна процедура будет работать то с одной БД, то с другой. Я бы в таком случае просто плюнул, и написал приблуду, которая одну и ту же процедуру по N базам распихивает. Будет проще. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2009, 15:52 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=35900686&tid=2011108]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
66ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
| others: | 233ms |
| total: | 394ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...