|
|
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
Elic, Спасибо за ссылку. Правильно ли я понял, что в CONSTRAINT нельзя устанавливать запрет на будущую дату, т.к. в этом случае мне пришлось бы использовать "functions that are not deterministic"? Только в триггере могу ставить такое ограничение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2016, 10:47 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
studierenПравильно ли я понялПолагаешь, документация тебя обманывает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2016, 11:21 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
Приветствую форумчан! Как получить весь список внешних ключей? В MS SQL Server запрос примерно выглядел бы так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. А как в ORACLE не знаю. :( Спасибо заранее за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2016, 13:06 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
https://oracle-base.com/dba/scripts http://www.orafaq.com/wiki/Scripts ... and much much more ... http://www.google.com/search?hl=en&q=oracle DBA Scripts ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2016, 13:28 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
Viewer, Thank you very much. Ушёл изучать скрипты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2016, 13:34 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
studierenКак получить весь список внешних ключей? sys.foreign_keys -> dba_constraints (type = 'R') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2016, 13:38 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2016, 13:38 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
В MS Sql Server в триггерах можно ссылаться на логические таблицы "Inserted" и "Deleted". В таблице "Inserted" все введённые новые записи, а в "Deleted" соответственно все удаленные записи. Как я понял в Oracle я должен добавить перед полем ":new." или ":old.", чтобы получить новое и старое значение. Но это немножко не то. Мне нужно именно в виде таблицы, что-то вроде "Inserted" и "Deleted". Что для этого надо делать? P.S. Хотел создать временную таблицу "на лету" как в MS Sql Server и добавить туда все ":new." и ":old.", ну так в ORACLE нет временных таблиц как в MS Sql Server. Как выйти из ситуации? :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2016, 08:05 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
studierenКак выйти из ситуации?Менять мировоззрение, читая документацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2016, 08:24 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
Что-то я не понимаю. Написал триггер на вставку и на изменение. Если в таблице меняю что-то, то ORACLE ругается " ... is mutating, trigger/function may not see it ". Прочёл в вышеуказанной ссылке (в предыдущем посте), что нужно написать какой-то COMPOUND TRIGGER при чём для VIEW. Т.е. чтобы триггер у меня начал работать так как мне надо, сначала создаю VIEW и пишу триггер на VIEW. А почему сразу не на таблицу? Бред какой-то. Зачем мне лишнее представление? В MS SQL Server проще простого. :( Может я не правильно понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2016, 13:36 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
studierenНаписал триггер на вставку и на изменение. Если в таблице меняю что-то А что, просто присвоить нужные новые значения :new не судьба?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2016, 13:40 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, После многочисленных экспериментов путём проб и ошибок выяснил следующее: если триггер на изменение (не важно BEFORE или AFTER), то внутри тела триггера нельзя оказывается ссылаться на таблицу триггера (т.е. на ту таблицу, для которой был написан собственно сам триггер). Пример. Допустим у меня есть таблица "Контракт" и есть "Платежи". Хочу скажем проверить общую сумму всех платежей, которая согласно бизнес правилам не должна превышать сумму контракта. Пишу триггер для платежей. Допустим кто-то ввел 2 платежа: 1000$ и 500$, общая сумма не превышает сумму контракта (1500$). Но кто-то решил подкорректировать сумму: вместо 1000 скажем 1100. Вот тут триггер должен запретить изменение, т.к. общая сумма в таком случае получится 1600$. И как же тогда мне нужно узнать общую сумму платежей? P.S. В MS SQL Server нет таких ограничений, можно изменяемые записи сверять со всей таблицей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2016, 15:08 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
studieren нет таких ограниченийотвлекись от триггера и подумай, что будет, если два пользователя одновременно вставляют в пределах лимита, но более половины. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2016, 15:16 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
про мутацию http://www.sql.ru/faq/faq_topic.aspx?fid=513 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2016, 15:21 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
афтер статемент, В любом случае общая сумма не должна превышать. Тот, кто первым успел сохранить "правильные" данные, то его данные должны быть в базе данных. А тот, кто опоздал и его данные уже "кривые", вот тут программа пусть ругает как следует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2016, 15:21 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
studieren, авторДопустим у меня есть таблица "Контракт" и есть "Платежи". Хочу скажем проверить общую сумму всех платежей, которая согласно бизнес правилам не должна превышать сумму контракта. Пишу триггер для платежей. Допустим кто-то ввел 2 платежа: 1000$ и 500$, общая сумма не превышает сумму контракта (1500$). Но кто-то решил подкорректировать сумму: вместо 1000 скажем 1100 ... В MS SQL Server нет таких ограничений вопрос, мона? т.е. если в одном операторе insert вставляешь 2 записи. (нет ещё коммита) и другой меняет (пытается) одну из вставляемых записей. то 1-ая вставка insert увидит изменения от 2-ой? так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2016, 15:25 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
studierenА тот, кто опоздал и его данные уже "кривые", вот тут программа пусть ругает как следует. Обломись. Триггерами (в особенности такими) этого не сделать. Открой для себя мир транзакций с уровнем выше чем dirty read. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2016, 15:25 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
studierenкто первым успел сохранитья тебе предлагал подумать, а не продолжать демонстрировать непонимание изоляции транзакций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2016, 15:29 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
tru55про мутацию http://www.sql.ru/faq/faq_topic.aspx?fid=513 Спасибо за ссылку. Прочёл несколько раз, но так и не смог осилить как адаптировать в моём случае. Не могли бы подсказать? Допустим есть таблица "контракт". Код: plsql 1. 2. 3. 4. 5. 6. 7. Есть также "платежи" Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. Добавляем записи. Код: plsql 1. 2. 3. 4. 5. 6. Теперь мне нужно запретить пользователю внести любые изменения в сумме платежа, если общая сумма превышает сумму контракта. Как это сделать в Oracle не знаю. Скажу честно, моего уровня знания не хватает в данном вопросе. Я недавно стал изучать ORACLE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2016, 09:30 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
Пересчитывать сумму в родительской записи, а на нее уже повесить проверку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2016, 09:42 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудров, В смысле в таблицу "Contract" добавить вычисляемое поле и триггер добавить туда? Допустим, я так и сделаю. Когда пользователь попытается исправить в платежах, разве триггер контракта тоже заработает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2016, 09:52 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудров, Или я не правильно понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2016, 09:56 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
Да правильно Примерно так Код: plsql 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. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2016, 10:11 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудров, Спасибо. Я понял Вашу мысль. Любое изменение в платежах нужно с помощью триггера отразить в дополнительном поле в контрактах. Если сумма превышает, то тогда и происходит исключение. ОК. Если не найду другое решение, то так и сделаю. Может есть ещё вариант? К сожалению, не всегда такое решение для меня приемлемо. Есть ещё сложные проверки данных в других таблицах на предмет пересекающихся диапазонов, вот там я в любом случае должен просмотреть все записи в "мутирующей" таблице. Хорошо, создам дополнительное представление (view) и туда попробую внедрить триггер. Если не ошибаюсь Compound trigger (или как там правильно называется?). Соответственно в клиентском приложении тогда буду иметь дело только с view. Как тогда решается проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2016, 10:27 |
|
||
|
Перевод из MS SQL Server в ORACLE
|
|||
|---|---|---|---|
|
#18+
studieren Если не ошибаюсь Compound trigger (или как там правильно называется?). Соответственно в клиентском приложении тогда буду иметь дело только с view. Как тогда решается проблема? 19080443 Using Compound DML Triggers to Avoid Mutating-Table Error с примером ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2016, 10:53 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39213570&tid=1886761]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
165ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 491ms |

| 0 / 0 |
