|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
Ку! Как определить в ДМЛ-триггере название таблицы, на которую повешен триггер? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2008, 18:08 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
В момент создания триггера запишите константу ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2008, 18:13 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
JannnyВ момент создания триггера запишите константу Это конечно вариант :), но может есть что-то типа dictionary_obj_name для ddl-триггера? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2008, 18:15 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
Поиском по all_triggers.trigger_body на наличие в теле какой-нибудь абракадабры. Поскольку проверка абракадабры требует наличия ее в теле, то она же и будет маркером. Во как я придумал (наверняка есть способ попроще :) ) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2008, 18:21 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
ТриггерЭто конечно вариант :) Это не "конечно вариант", а "правильный вариант". Триггер но может есть что-то типа dictionary_obj_name для ddl-триггера? И какой в этом смысл? "Таблица, на которой повешен триггер" - идеологическая константа. Для написания кода руками она нафиг не нужна, для всяких автогенерируемых стандартных прибамбасов ее тривиально засунуть именно в виде константы. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2008, 18:28 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
Триггер JannnyВ момент создания триггера запишите константу Это конечно вариант :), но может есть что-то типа dictionary_obj_name для ddl-триггера? В all_triggers есть и table_owner и table_name. Но змея кусает себя за хвост. Вам нужно в триггере узнать имя триггера , для того, чтобы узнать таблицу. :-) Я когда то давно где то показывал вариант с использованием format_call_stack с клеянием и резанием, но это все пустое. Вариант Jannny самый адекватный. Когда Вы пишете текст триггера Вы знаете и его имя, и таблицу, на которой он висит... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2008, 18:28 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
jan2aryПоиском по all_triggers.trigger_body на наличие в теле какой-нибудь абракадабры. Поскольку проверка абракадабры требует наличия ее в теле, то она же и будет маркером. Во как я придумал (наверняка есть способ попроще :) ) Осталось обеспечить уникальность абракадабр... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2008, 19:08 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
dmidek Триггер JannnyВ момент создания триггера запишите константу Это конечно вариант :), но может есть что-то типа dictionary_obj_name для ddl-триггера? В all_triggers есть и table_owner и table_name. Но змея кусает себя за хвост. Вам нужно в триггере узнать имя триггера , для того, чтобы узнать таблицу. :-) Я когда то давно где то показывал вариант с использованием format_call_stack с клеянием и резанием, но это все пустое. Вариант Jannny самый адекватный. Когда Вы пишете текст триггера Вы знаете и его имя, и таблицу, на которой он висит... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2008, 19:13 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
RA\/ENВоросы? Гадский парсер... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2008, 19:15 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
RA\/EN Воросы? Да только один, зачем триггеру знать имя своей таблички, мож пустая суета это все :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2008, 19:22 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
RA\/ENВоросы? 1. Покажете то же самое в нормальной технологической цепочке, а не на тестовом примере? Нормальная цепочка - это в смысле "проектировщик переименовывает таблицу в CASE инструменте..." ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2008, 19:31 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
softwarer RA\/ENВоросы? 1. Покажете то же самое в нормальной технологической цепочке, а не на тестовом примере? Нормальная цепочка - это в смысле "проектировщик переименовывает таблицу в CASE инструменте..." Тривиально - попытки поиметь нечто вроде секционированной таблицы на SE. В данном случае это было бы частью exchange partition. Аргумент "EE - дорого" оправдывает такой подход. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2008, 19:44 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
RA\/EN softwarer1. Покажете то же самое в нормальной технологической цепочке, .... (1)Тривиально - попытки поиметь нечто вроде секционированной таблицы на SE. .... (2) (2) - признаться, не выглядит ответом на (1). Вы пытаетесь ответить "когда такая задача может возникнуть", а я прошу - нормальную технологическую цепочку, о чем Вы не сказали ни слова. Hint: "нормальная технологическая цепочка" подразумевает в том числе те или иные гарантии валидности автоматически генерируемых объектов. Скажем, в базе будет висеть DDL-триггер, который отловит Ваш rename и инициирует пересоздание триггера. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2008, 19:55 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
softwarer RA\/EN softwarer1. Покажете то же самое в нормальной технологической цепочке, .... (1)Тривиально - попытки поиметь нечто вроде секционированной таблицы на SE. .... (2) (2) - признаться, не выглядит ответом на (1). Вы пытаетесь ответить "когда такая задача может возникнуть", а я прошу - нормальную технологическую цепочку, о чем Вы не сказали ни слова. Hint: "нормальная технологическая цепочка" подразумевает в том числе те или иные гарантии валидности автоматически генерируемых объектов. Скажем, в базе будет висеть DDL-триггер, который отловит Ваш rename и инициирует пересоздание триггера. О критериях "нормальности" можно спорить до хрипоты... Я считаю, что наворачивать кодогенерацию там, где достаточно получить информацию стандартными средствами Oracle, есть пустая трата времени разработчиков, тестеров и сопровожденцев. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2008, 09:40 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
RA\/ENО критериях "нормальности" можно спорить до хрипоты... О полном списке - безусловно. Но вряд ли Вы будете спорить с тем, что надежность входит в них под одним из первых номеров. RA\/ENЯ считаю, что наворачивать кодогенерацию там, где достаточно получить информацию стандартными средствами Oracle, есть пустая трата времени разработчиков, тестеров и сопровожденцев. [src oracle]SQL> create or replace trigger trig1 before insert on toredo 2 begin dbms_output.put_line(dbms_utility.format_call_stack); end; 3 / Trigger created SQL> insert into toredo values(1); ----- PL/SQL Call Stack ----- object line object handle number name ==>222120FC 1 K.TRIG1 Cчитать, безусловно, можно что угодно. Вот обосновать, что одна кодогенерация (которая рассует по десяти-ста-десяти тысячам таблиц триггер с парсингом стека) чем-то кардинально отличается от другой кодогенерации (которая рассует тот же триггер с константой) - оно как-то сложнее. Обосновать пустую трату времени разработчиков на константы по сравнению с пустой тратой времени разработчиков на парсинг - тоже не совсем тривиально. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2008, 10:28 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
softwarer... Вот обосновать, что одна кодогенерация (которая рассует по десяти-ста-десяти тысячам таблиц триггер с парсингом стека) чем-то кардинально отличается от другой кодогенерации (которая рассует тот же триггер с константой) - оно как-то сложнее... А где я говорил, что предполагаю кодогенерацию? Я ее не предполагаю. И вообще это форум по Oracle, а не проектированию :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2008, 11:01 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
RA\/ENА где я говорил, что предполагаю кодогенерацию? Я ее не предполагаю. Тогда Вы ее как-то странно не предполагаете. Вы почему-то в одном случае не предполагаете, а в другом считаете, что она будет. RA\/ENИ вообще это форум по Oracle, а не проектированию :) То есть Вы переходите к версии "это может понадобиться при кривом проектировании"? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2008, 12:47 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
softwarerТо есть Вы переходите к версии "это может понадобиться при кривом проектировании"? "Кривово" проектирования не существует. Существует либо необоснованные с точки зрения требований проекта архитектурные решения, либо долбоежизм клинический обыкновенный. Под вторую категорию не подходит ни использование formаt_call_stack, ни кодогенератор. Что из двух решений попадает в первую - с переменным успехом зависит от проекта. Ладно, вот второй пример - из "была ли функция вызвана из триггера, и, если да, то на какой он таблице?" Вопрос практически эквивалентен авторскому. Предлагаете сквозную передачу параметров через десяток функций заложить? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2008, 14:01 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
softwarer"Таблица, на которой повешен триггер" - идеологическая константа. Well, I do not know what is идеологическая константа, but I do know tables can be renamed :). SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2008, 19:08 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
In 10g: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2008, 19:45 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
SY Код: plaintext 1.
Для простоты функция Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Как сменить на строковое значение не догнал:( ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2008, 20:41 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
ГостЪДля простоты функция Well, if you are concerned about $$PLSQL_UNIT, use famous who_am_i function: Код: plaintext 1. 2. 3. 4. 5.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2008, 22:09 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
SY Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2008, 09:55 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
RA\/ENЛадно, вот второй пример - из "была ли функция вызвана из триггера, и, если да, то на какой он таблице?" Вопрос практически эквивалентен авторскому. Предлагаете сквозную передачу параметров через десяток функций заложить? Этот пример в нормальной практике работы существовать не может и не должен. Функции должно быть все равно, откуда ее вызвали; если не все равно, если какие-то ее действия этим определяются, это - ошибка проектирования. В некоторых случаях может понадобиться понятие контекста - "правызывающий" устанавливает некоторое состояние, правызываемый им пользуется. Я могу назвать единственную ситуацию, когда более-менее интересен ответ на приведенный Вами вопрос. Но я решаю ее несколько проще: Код: plaintext 1. 2. 3. 4.
SYWell, I do not know what is идеологическая константа, but I do know tables can be renamed :) Безусловно, can. И что из этого следует, если мы говорим о реальном производственном процессе? Переименование таблицы - очень редкая операция относительно других alter-ов, которые также вызывают необходимость менять навешенные триггера. Поэтому придумав способ защищаться только и исключительно от rename, мы практически зря потратим время, увеличив общую надежность кода на очень малую величину. А любой нормальный способ, контролирующий alter-ы вообще, будет работать и для rename тоже - убирая тем самым необходимость во всей этой дополнительной шелухе. Что же касается идеологической константы.... ну вот скажем число "пи" - как Вы полагаете, константа или нет? Хотя мы оба знаем, что в очередной версии софта оно can be changed - например, может потребоваться повысить ему разрядность. P.S. Помимо прочего, у меня действует рефлекс на минимизацию обращений к data dictionary - это часто здорово тормозит работу. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2008, 14:45 |
|
Определить в ДМЛ-триггере название таблицы, на которую повешен триггер
|
|||
---|---|---|---|
#18+
cuurenct_schema не работает при работе с таблицами из других схем owa_util.who_called_me(owner => lc_owner, name => lc_trigger, lineno => ln_line, caller_t => lc_caller); dbms_output.put_line('lc_owner => '||lc_owner); dbms_output.put_line('lc_trigger => '||lc_trigger); dbms_output.put_line('ln_line => '||ln_line); dbms_output.put_line('lc_caller => '||lc_caller); ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2020, 18:32 |
|
|
start [/forum/topic.php?fid=52&msg=35235045&tid=1881606]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 161ms |
0 / 0 |