Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
Теперь позвольте мне поставить проблему. Запрос Код: plaintext 1. 2. возвращает неправильный результат. Неправильность состоит в том, что в технологическое время сервер устойчиво возвращает результат 785.28, а при многопользовательской работе сумма чуть другая. К серверу поступают операторы изменения только вот такого типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. то есть, только операторы НЕ меняющие баланс по клиенту+товару! Стоит остановить поток изменений - и баланс "возвращается" на место. В чем может быть причина? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 14:31 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
И еще такая "простенькая" задачка: Есть стороннее приложение, поддерживаемое разработчиком (т.е., любое изменение - потеря поддержки). В приложении есть разделение прав по отделам - каждый отдел видит только свои проводки. Но Вам неожиданно поставили задачу - ввести разграничение доступа к проводкам по их суммам! Т.е., большие сделки (больше XXXX) могут видеть только "особо уполномоченные". Как бы Вы поступили в этом случае? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 14:36 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
PiИ еще такая "простенькая" задачка: Смотря что Вы называете "изменением". При некотором понимании задача неадминистративного решения не имеет :) Подразумевающийся ответ для Oracle - FGAC, он же row level security, он же DBMS_RLS. Универсальное, не зависящее от сервера решение - сбрасывать дешевые проводки в отдельную базу. Хм. Ну еще можно клиента подпатчить - так, чтобы ненужные строки пропускались в датасетах, возвращаемых в клиентское приложение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 14:43 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
vadiminfo SergSuper Может еще кто напишет примеры для других СУБД Оракл не рекомендует рекурсий в триггерах, т.е. на DML delete, чтобы и в триггере DML delete для той же таблы по причине резкого расхода памяти. Конечно, можно, например, такое написать: create or replace trigger ttt AFTER DELETE ON tree FOR EACH ROW DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN DELETE FROM tree WHERE parent = :OLD.id; COMMIT; END; Но недостатком будет, наприер, то, что в случае отката операции: delete from tree where id = 1 все потомки id = 1 будут удалены, а сам этот узел останется. Это не подойдет для ограничений целостности. vadiminfo, Ваш код работает, и работает достаточно быстро - 2, 403 сек. Его "недостаток" - отсутствие возможности отката, - не очень существеннен в обсуждаемом примере, поскольку триггер-то стоит AFTER, когда уже все проверили, а возможность срабатывания триггеров на других таблицах в нашем примере не обсуждается - ведь это не из реальной жизни. В реальной жизни обсуждаемый пример решается совсем по другому ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 14:49 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
Pi Его "недостаток" - отсутствие возможности отката, - не очень существеннен в обсуждаемом примере, поскольку триггер-то стоит AFTER, когда уже все проверили, а возможность срабатывания триггеров на других таблицах в нашем примере не обсуждается - ведь это не из реальной жизни. В реальной жизни обсуждаемый пример решается совсем по другому Не могли бы Вы пояснить, что значит не очень существеннен? В этом примере- возможно, а в некоторых задачах очень существенен. Кстати, как Вы себе представляете этот тригер [sql]BEFORE FOR EACH ROW[/sql]? А решение, т.к. настоящее "из реальной жизни" попахивает извращением. Почему я должен делать два тригера вместо одного да ещё и пихать данные в таблицу, а потом оттуда вытаскивать? Почему великий и могучий Оракул до сих пор не имеет в общем-то простой и нужной возможности? Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 15:22 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
protector Почему я должен делать два тригера вместо одного да ещё и пихать данные в таблицу, а потом оттуда вытаскивать? Почему великий и могучий Оракул до сих пор не имеет в общем-то простой и нужной возможности? Posted via ActualForum NNTP Server 1.1 Каков вопрос - таков ответ. Была поставлена задача г. SergSuper (а где он, кстати?) в его посте от 27 окт 04, 15:40 (см. эту ветку, стр. 12). НЕ выходя за пределы задачи, было предложены решения. Например, оказалось, что приведенный самим SergSuper код валится на 32 циклах вложенности. Подобный (подчеркну - подобный ) код на Oracle валится на 50 вложениях. Но есть обходные примеры, которые показали пока только на ASA и Oracle. Ждем подобных примеров на MS SQL! Желательно с проверкой на большом количестве данных - я указал возможную таблицу для тестирования. А на самом деле предложенная г. SergSuper задача по-сути решается совсем по-другому - через FK on DELETE CASCADE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 15:34 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
softwarer PiИ еще такая "простенькая" задачка: Смотря что Вы называете "изменением". При некотором понимании задача неадминистративного решения не имеет :) Подразумевающийся ответ для Oracle - FGAC, он же row level security, он же DBMS_RLS. Универсальное, не зависящее от сервера решение - сбрасывать дешевые проводки в отдельную базу. Хм. Ну еще можно клиента подпатчить - так, чтобы ненужные строки пропускались в датасетах, возвращаемых в клиентское приложение. Пан softwarer, я совершенно согласен с Вами в предложенном решении для Oracle. А кто что предложит для других баз? Теперь позвольте свой комментарий. Oracle сегодня (впрочем, и вчера тоже!), в коммерческом релизе, дает возможность значительно увеличить детальность доступа к данным без изменения приложений (и без потери поддержки!). Фактически, имея на руках коммерческий Oracle, можно создавать приватные базы . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 15:40 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
ASCRUSНу раз пошла такая пьянка, приведу и я для ASA триггер ... Что мы с него видим: 1. Он сделан как FOR EACH STATEMENT и будет вызываться только один раз для всего множества удаляемых нодов с дерева. 2. В ASA поддерживаются глобальные сессионные переменные 3. В ASA нет опций запрета вызова рекурсий, все это можно разрулить через глобальные переменные 4. В ASA есть времянки, которые не участвуют в транзакциях, что соотвествующе прибавляем им скорости работы. 5. В ASA есть рекурсивные запросы, которые можно применять в SELECT и INSERT, но не в DELETE. Соотвествующе поэтому и была создана времянка. 6. В ASA есть понятие исключений для блоков BEGIN..END и соотвествующая обработка их. ASCRUS, а как Вы в Dfitv коде получили доступ к удаленным записям? В MS SQL - это записи в deleted, а в ASA? thanks in advance! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 15:59 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
ASCRUSНу раз пошла такая пьянка... В дополнение - мне лично WITH RECURSIVE, использующийся для обработки деревьев в ASA и DB2 нравиться больше, чем Ораклевый вариант. Вместо обьяснений приведу пример почему: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. NameParent_idNode_idLevelPath'Продукты питания''Прод'0'Прод''----Молочные продукты''Прод''Молоч'1'Прод/Молоч''----Хлебобулочные изделия''Прод''Хлеб'1'Прод/Хлеб''Техника''Тех'0'Тех''----Бытовая техника''Тех''БытТех'1'Тех/БытТех''----Видеоэлектронника''Тех''ВидеоТех'1'Тех/ВидеоТех''--------Видеомагнитофоны''ВидеоТех''ВМ'2'Тех/ВидеоТех/ВМ''--------Телевизоры''ВидеоТех''ТВ'2'Тех/ВидеоТех/ТВ' Из за того, что в рекурсивном запросе можно отдельно указать запрос, откуда брать родителей и запрос, откуда брать детей, можно: 1. Строить рекурсивные запросы по деревьям, хранящимся во множестве таблиц 2. Организовывать нарастающие переменные, в данном случае были организованы переменные Level (уровень вложености нода), которая использовалась для отступа в наименовании группы и Path (путь к ноду), по которой была произведена сортировка нодов относительно каждого родительского нода. Насколько я понимаю, чтобы все это проделать в Оракле одним чистым запросом отделаться нельзя будет. P.S. Красивее было бы конечно в наименовании отступы ставить пробелами, но у Judge тэг CSV их кушает дюже хорошо :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Ответ корректен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 16:29 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
Piа как Вы в Dfitv коде получили доступ к удаленным записям? В MS SQL - это записи в deleted, а в ASA? Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 17:03 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
PiASCRUS, а как Вы в Dfitv коде получили доступ к удаленным записям? В MS SQL - это записи в deleted, а в ASA? В ASA нет особых ограничений, как будут называться NEW и OLD внутри триггера, через опцию триггера REFERENCING им можно назначить любое удобное имя. С учетом того, что такие таблицы будут видны как временные из вызываемых с триггера процедур, то это удобно, если например у меня есть отдельно триггера на INSERT, UPDATE и DELETE и все они вызывают одну ХП, которой нужно по изменяемым записям что то сделать. В итоге достаточно во всех 3 триггерах назвать набор изменяемых данных одним именем и смело вызывать в каждом эту ХП. PiОтвет корректен? Если функция "sys_connect_by_path" является системной, то есть встроенна в Оракл, а не написана ручками Вами, то ответ корректен. Кстати я не вижу в запросе ORDER BY - в Оракл разрешается на рекурсивные запросы вешать сортировку и можно ли такие запросы использовать в качестве подзапросов ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 17:18 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
Есть в ASA еще одна удобная фича, о которой, по-моему, почему-то до сих пор не упомянули - можно создать несколько триггеров каждого вида (before row level, before statement level...) и явно указать порядок их срабатывания. В Oracle, например, этого нет. Про MS SQL я и не говорю :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 17:32 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
ASCRUS Если функция "sys_connect_by_path" является системной, то есть встроенна в Оракл, а не написана ручками Вами, то ответ корректен. Кстати я не вижу в запросе ORDER BY - в Оракл разрешается на рекурсивные запросы вешать сортировку и можно ли такие запросы использовать в качестве подзапросов ? Код: 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. Syntax sys_connect_by_path::= Text description of sys_connect_by_path Purpose SYS_CONNECT_BY_PATH is valid only in hierarchical queries. It returns the path of a column value from root to node, with column values separated by char for each row returned by CONNECT BY condition. Both column and char can be any of the datatypes CHAR, VARCHAR2, NCHAR, or NVARCHAR2. The string returned is of VARCHAR2 datatype and is in the same character set as column. See Also: " Hierarchical Queries " for more information about hierarchical queries and CONNECT BY conditions ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 17:39 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
Pi НЕ выходя за пределы задачи, было предложены решения. Например, оказалось, что приведенный самим SergSuper код валится на 32 циклах вложенности. Подобный (подчеркну - подобный) код на Oracle валится на 50 вложениях. Но есть обходные примеры, которые показали пока только на ASA и Oracle. Ждем подобных примеров на MS SQL! Желательно с проверкой на большом количестве данных - я указал возможную таблицу для тестирования. А на самом деле предложенная г. SergSuper задача по-сути решается совсем по-другому - через FK on DELETE CASCADE. Да эта задача решается через FK. Просто вопрос от задачи перешёл к сравнению возможностей тригеров. Вот и я в ту же степь... Задача проверки констрейнтов, не реализуемых стандартными методами, обычно и возлагается на тригеры. А эти констрейнты могут быть очень сложные и что в таком случае делать? Селект-то из таблицы не сделаешь в for each row. Вот и приходится всё делать через одно место. ;) Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 17:49 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
Есть в ASA еще одна удобная фича, о которой, по-моему, почему-то до сих пор не упомянули - можно создать несколько триггеров каждого вида (before row level, before statement level...) и явно указать порядок их срабатывания. В Oracle, например, этого нет. Про MS SQL я и не говорю :-) неправда ваша, дяденька! см. BOL sp_settriggerorder. Вот в чем горькая правда, так то, что триггер может быть только первым, последним или никаким :-). Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 17:52 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
PL99Есть в ASA еще одна удобная фича, о которой, по-моему, почему-то до сих пор не упомянули - можно создать несколько триггеров каждого вида (before row level, before statement level...) и явно указать порядок их срабатывания. В Oracle, например, этого нет. Про MS SQL я и не говорю :-) PL99, во-первых, я хотел бы Вас лично вместе с г. ASCRUS поблагодарить за разъяснение Код: plaintext 1. Во-вторых, Ваш цитируемый пост чуть размыт, что позволяет сказать и "Вы правы", и "Вы не правы" Вы привели несколько триггеров разного времени исполнения, так их порядок предопределен и неизменяем . Если же говорить о нескольких триггерах одного типа - то таки да, и в 9-1 версии их порядок неопределен . С другой стороны, зависимость правильности действия триггеров от порядка их исполнения для меня лично сомнительна! Я, кстати, напарывался на эти проблемы, когда сопровождал с пяток "почти" однотипных объектов. С тех поря я для себя решил, что если порядок важен - то значительно правильнее написать "коротко-транзакционные" процедуры, и вызывать их из одного триггера. И зная еще с 98 года что такое возможно в Interbase, никогда этого порядка не жаждал. Впрочем, может у Вас есть готовый пример? А кстати - есть понятие "коротких" транзакций в ASA? "Короткие" - это те, при помощи которых Oracle, с незапамятных временApplication developers can improve the performance of short, nondistributed transactions by using the BEGIN_DISCRETE_TRANSACTION procedure ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 17:52 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
locky Есть в ASA еще одна удобная фича, о которой, по-моему, почему-то до сих пор не упомянули - можно создать несколько триггеров каждого вида (before row level, before statement level...) и явно указать порядок их срабатывания. В Oracle, например, этого нет. Про MS SQL я и не говорю :-) неправда ваша, дяденька! см. BOL sp_settriggerorder. Вот в чем горькая правда, так то, что триггер может быть только первым, последним или никаким :-). Posted via ActualForum NNTP Server 1.1 Хорошо бы указывать, где это. Не все здесь знают MS SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 17:54 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
Так, что-то товарищ Pi меня совсем как-то опустил. Во-первых я хотел узнать каков принцип работы с записями в триггерах на разныз СУБД. И первые ответы ввергли меня в пессимизм. Почти как в анекдоте: У чукчи спрашивают: какой народ самый глупый? А он отвечает: Зато у нас песни красивые! Т.е. вместо того чтоб написать примеры триггеров народ пишет что у них зато есть рекурсивные запросы и автономные транзакции и как нехорошо использовать рекурсивные триггеры. Замечательно, но я то не об этом. Потом товарищ Pi переписал к себе мой триггер, который я писал не особо задумываясь и естественно не проверяя, был вне себя от щастья нашедши синтаксическую ошибку, исправил, и был еще больше щаслив когда его(а якобы мой) триггер не работал как надо. Потом он решил триггер усовершенствовать, убрав условие выхода из рекурсии и стал меня укорять что я написал ерунду ( Пример в MS SQL, ВООБЩЕ ГОВОРЯ, НЕ РАБОТОСПОСОБЕН. Этот тот самый геморрой, о котором я имел место говорить ). Ну что ж мне не жалко, всегда готов сделать приятное человеку. К щастью дискуссия не ушла во флейм и появились действительно рабочие примеры, за что всем не поленившимся написать большое спасибо. Кстати хотелось бы увидеть как это делается на DB2 и InterBase. Так же выкладываю проверенный пример на MS SQL, если уж витает мысль оформить это типа ФАКа. Здесь уже не используются рекурсивные триггера, из-за чего надо писать не очень красивую конструкцию с циклом. Код: 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. И теперь я подведу первичные итоги(надеюсь кто меня знает поймёт правильно): 1. Приведенный пример в Oracle выглядит сложнее. С этим я с товарищем Pi полностью согласен. Выражаясь его языком - выглядит как этот тот самый геморрой. 2. Пример в Oracle работает очень медленно. Я, чесно говоря, не знаю как товарищу Pi удалось так тормознуть неплохую железяку, но у меня удаление на гораздо более простом сервере занимает 0.173 с теми же 1155 записями. И это без индексов. 3. ВООБЩЕ ГОВОРЯ, не стоит судить о геморе в MS SQL и о работоспособности примеров имея весьма слабое о нём представление. 4. Попутно желающие могут увидеть, что иерархические формы запроса довольно просто заменяются циклом и не выглядят более наглядными(для меня и самого это было неожиданностью - я всё жду Юкона, где это есть) Поэтому прошу господ, ратующих за меганвороченность, вспоминать время от времени старую русскую поговорку - Простота - залог надёжности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 17:56 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
А вот еще такая проблема. В коде Oracle я могу alter trigger Trigger_tr disable; и, соответсвенно, alter trigger Trigger_tr enable; Уогда пересел на MS SQL (6.5), то необходимость drop trigger Trigger_tr (невозможность его отключить) приводила к полному безобразию - мы в Штаты гнали процедуры, которые дропали триггера и снова их ставили! Ну, у них там в судах Вирджинии народ делом занят, по системам сам не ползает, а представьте себе, если бы такой код поставили где-то здесь? Обязательно нашелся бы умник, который че-нибудь поменял бы в триггере, а потом бы удивлялся, чего все не так работает... А как с этим у соседей? ASA? DB/2? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 17:58 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
PiВы привели несколько триггеров разного времени исполнения, так их порядок предопределен и неизменяем. Если же говорить о нескольких триггерах одного типа - то таки да, и в 9-1 версии их порядок неопределен.Уточняю. Для нескольких before insert row level (например) триггеров можно явным образом указать порядок срабатывания. PiС другой стороны, зависимость правильности действия триггеров от порядка их исполнения для меня лично сомнительна! Я, кстати, напарывался на эти проблемы, когда сопровождал с пяток "почти" однотипных объектов. С тех поря я для себя решил, что если порядок важен - то значительно правильнее написать "коротко-транзакционные" процедуры, и вызывать их из одного триггера. И зная еще с 98 года что такое возможно в Interbase, никогда этого порядка не жаждал. Впрочем, может у Вас есть готовый пример?Вы правы, но я исхожу из положения - лишней фичи не бывает... К сожалению, готового примера у меня нет, т.к. я уже 6 лет не работаю с ASA. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 18:00 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
авторА вот еще такая проблема. В коде Oracle я могу alter trigger Trigger_tr disable; и, соответсвенно, alter trigger Trigger_tr enable; Уогда пересел на MS SQL (6.5), то необходимость drop trigger Trigger_tr (невозможность его отключить) приводила к полному безобразию - мы в Штаты гнали процедуры, которые дропали триггера и снова их ставили! Ну, у них там в судах Вирджинии народ делом занят, по системам сам не ползает, а представьте себе, если бы такой код поставили где-то здесь? Обязательно нашелся бы умник, который че-нибудь поменял бы в триггере, а потом бы удивлялся, чего все не так работает... А как с этим у соседей? ASA? DB/2? Слишком старую версию Вы MSSQL вспомнили, сейчас там есть отключение триггеров на таблицу командой ALTER TABLE. В ASA штатными средствами можно отключить только все триггера - через специальный параметр при запуске сервера (для всех сессий) или же установкой нужной темпоральной опции в сессии (только для этой сессии). Если хочется отключать отдельные группы триггеров, то все опять же разруливается через глобальные переменные, фактически мой пример на удаление по дереву триггера написанный выше как раз и демонстирует как отключить повторный рекурсивный вызов триггера. Кстати в ASA на соединение сессии можно указать автоматически запускать собственную ХП, в которой сразу же создавать и инициализировать нужные глобальные переменные, заполнять глобальные временные таблицы или даже проверить по какому то условию и дать от ворот поворот подключающейся сессии (например логин уже работает в БД или же кол-во одновременно подключаемых станций не может быть больше 10). Там же можно сразу по ходу подключения создавать/не создавать нужные глобальные переменные, если по логике необходимо включать или отключать группы триггеров. Вообще я считаю LOGIN процедуру чрезвычайно полезной фичой, позволяющей мне сразу же при начале коннекта сессии ее проинициализировать и подготовить к работе, что позволяет мне не только с клиентского приложения, но и с стандартных утилит ASA сразу под рукой иметь всю необходимую инициализацию без ручных вызов ХП (что не очень то сделаешь из под визуальных утилит ASA). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 18:25 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
SergSuperТак, что-то товарищ Pi меня совсем как-то опустил. ... Поэтому прошу господ, ратующих за меганвороченность, вспоминать время от времени старую русскую поговорку - Простота - залог надёжности SergSuper, Вы как-то болезненно все воспринимаете. Я никого не хочу опускать, я хочу чтобы именно здесь, на этой ветке, собралось побольше примеров - разных, хороших...и правильных! Вот к примеру: Код: 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32). То есть, опять Ваш пример у меня не сработал! Честное слово, это Ваш пример, взятый с Вашего поста! Может, какие-то настройки сервера нужны? Просьба указать их явно в коде. ничто так не разнообразит жизнь как достойный противник ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 18:26 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
Попробуйте вот так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. P.S. Гм, я уже и писать чего то на TSQL разучился, хотел к IF прилепить THEN и END IF :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 18:32 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
Да нет, скорее всего надо отключить рекурсивное выполнение триггеров ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 18:34 |
|
||
|
А зачем нужен этот монстр....... MS SQL?
|
|||
|---|---|---|---|
|
#18+
ASCRUS Слишком старую версию Вы MSSQL вспомнили, сейчас там есть отключение триггеров на таблицу командой ALTER TABLE. ... Там же можно сразу по ходу подключения создавать/не создавать нужные глобальные переменные, если по логике необходимо включать или отключать группы триггеров. Вообще я считаю LOGIN процедуру чрезвычайно полезной фичой, позволяющей мне сразу же при начале коннекта сессии ее проинициализировать и подготовить к работе, что позволяет мне не только с клиентского приложения, но и с стандартных утилит ASA сразу под рукой иметь всю необходимую инициализацию без ручных вызов ХП (что не очень то сделаешь из под визуальных утилит ASA). 1. Эт-то точно! 2. Oracle9i Database Concepts Application Context Application context facilitates the implementation of fine-grained access control. It lets you implement security policies with functions and then associate those security policies with applications. Each application can have its own application-specific context. Users are not allowed to arbitrarily change their context (for example, through SQL*Plus). Application contexts permit flexible, parameter-based access control, based on attributes of interest to an application. For example, context attributes for a human resources application could include "position," "organizational unit," and "country," whereas attributes for an order-entry control might be "customer number" and "sales region". You can: Base predicates on context values Use context values within predicates, as bind variables Set user attributes Access user attributes Может, это из этого ряда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 18:34 |
|
||
|
|

start [/forum/topic.php?fid=35&msg=32761588&tid=1554012]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
89ms |
get tp. blocked users: |
2ms |
| others: | 221ms |
| total: | 426ms |

| 0 / 0 |
