|
Реализовать constraint
|
|||
---|---|---|---|
#18+
SY, Elic подскажите, как с этим бороться: Код: 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. 77. 78.
deterministic что есть не могу найти четкое определение? И что изменится если данную функцию я сделаю таковой? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2021, 20:35 |
|
Реализовать constraint
|
|||
---|---|---|---|
#18+
wsnet deterministic что есть не могу найти четкое определение? И что изменится если данную функцию я сделаю таковой? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Function Declaration and Definition : DETERMINISTIC Tells the optimizer that the function returns the same value whenever it is invoked with the same parameter values (if this is not true, then specifying DETERMINISTIC causes unpredictable results). Creating a Function-Based Index : In addition to the prerequisites for creating a conventional index, if the index is based on user-defined functions, then those functions must be marked DETERMINISTIC. Код: 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.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2021, 21:11 |
|
Реализовать constraint
|
|||
---|---|---|---|
#18+
wsnet SQL> alter table softmaster.detail 2 add ( 3 a1 int generated always as (decode(b,null,null,a)), 4 b1 int generated always as (decode(a, null, null, softmaster.GetB()) ) 5 ); b1 int generated always as (decode(a, null, null, softmaster.GetB())) * ERROR at line 4: ORA-30553: The function is not deterministic [/src] deterministic что есть не могу найти четкое определение? И что изменится если данную функцию я сделаю таковой? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/lnpls/DETERMINISTIC-clause.html#GUID-6AECC957-27CC-4334-9F43-0FBE88F92654] DETERMINISTIC Clause The deterministic option marks a function that returns predictable results and has no side effects . (Детерминированная опция отмечает функцию, которая возвращает предсказуемые результаты и не имеет побочных эффектов .) То есть вы помечаете, что это такая функция, возвращаемые значения которой предсказуемы и нет от неё побочных эффектов. То есть указываете, что сколько бы раз вы не вызвали функцию без аргументов, она вернет одно и то же значение. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2021, 21:16 |
|
Реализовать constraint
|
|||
---|---|---|---|
#18+
wsnet Как думаешь при таких данных нужна она или же обойдемся триггером? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2021, 21:18 |
|
Реализовать constraint
|
|||
---|---|---|---|
#18+
wsnet, С учетом уже проведенного обсуждения сформулируйте, пожалуйста, с самого начала и до самого конца максимально точно и исчерпывающе, что именно вы хотите сделать? Как должна реагировать база на те или иные действия? Другие сведения? При этом не нужно писать никаких слов и предположений про то, как именно это будет реализовано. То есть вы формулируете техническое задание, а мы предлагаем, как его реализовать. Обсуждаем это между собой, а потом с вами. Чтобы у нас с вами не получалось что-то вроде P.S. Кстати, эта старая известная картинка была в весьма неплохой статье Бизнес и системный аналитик. Что нужно знать В ней есть раздел "Научите заказчика отвечать на вопрос «Что?», а не формулировать требования в формате «Как»" ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2021, 21:30 |
|
Реализовать constraint
|
|||
---|---|---|---|
#18+
Вот я тоже читал-читал, но так и не понял, зачем нужно при пустом А подставлять В, а при пустом В подставлять А. Да ещё и с учётом того, что В физически не может быть пустым. Вот нафига эти пляски с FB-индексами? Можно ж просто добавить поле в существующую таблицу, заполнить его (если это прямо уж так нужно) и сделать новый констрейнт. Ведь 2-е поле в существующем констрейнте - это ОСЛАБЛЕНИЕ ограничения, т.е. особых проблем на существующих данных не должно привносить. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2021, 21:42 |
|
Реализовать constraint
|
|||
---|---|---|---|
#18+
Elic AlexFF__| Нет в этой таблице уникального индекса на два поля. Об этом прямо и говорит ошибка: ORA-02270 no matching primary or unique key for then column list Стыд мне и позор! Мало того, что сам не вижу различия между индексами и ограничениями целостности, так еще и ввел в заблуждение уважаемых гуру форума ;) Но все в любом случае молодцы. Тема, которая должна была окончится на 3-4 сообщении с комментарием "чтозахреньпридумалисрочноменять" уже заходит за 2 страницы ) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2021, 22:59 |
|
Реализовать constraint
|
|||
---|---|---|---|
#18+
SQL*Plus, в посте 22284458 сформулировал исходные данные. Еще раз для AlexFF__| изначально таблица softmaster.master была c одним уникальным ключом softmaster.master.a, далее понадобилось изменить уникальный ключ таблицы - добавив уникальный ключ из двух полей softmaster.master.a и softmaster.master.b, но при попытке добавить уникальный индекс (ограничение unique) имеем ошибку: Код: 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.
То есть, если уникальный индекс состоит из нескольких полей и хоть одно поле непустое - запись в индекс будет сделана (причем все значения полей, включая NULL). Соответственно вторая запись с теми же значениями будет нарушать ограничение уникальности. В связи с этим понадобилось ввести следующий FBI-индекс: Код: plsql 1.
Вопрос, быть может в Oracle есть способ сделать таким образом, чтобы не прибегать к созданию таких FBI-индексов, я этого не нашел. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2021, 10:09 |
|
Реализовать constraint
|
|||
---|---|---|---|
#18+
wsnet То есть, если уникальный индекс состоит из нескольких полей и хоть одно поле непустое - запись в индекс будет сделана (причем все значения полей, включая NULL). Соответственно вторая запись с теми же значениями будет нарушать ограничение уникальности. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2021, 10:45 |
|
Реализовать constraint
|
|||
---|---|---|---|
#18+
Вячеслав Любомудров, я же говорил, что поле дочерней таблицы detail.a ссылается на master.a, поле detail.b на master.b. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2021, 11:03 |
|
Реализовать constraint
|
|||
---|---|---|---|
#18+
Точнее, в дочерней таблице запись detail.a, detail.b ссылается на запись master.a, master.b ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2021, 11:17 |
|
Реализовать constraint
|
|||
---|---|---|---|
#18+
Запись master.a, master.b уникальна. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2021, 11:23 |
|
Реализовать constraint
|
|||
---|---|---|---|
#18+
wsnetЗапись master.a, master.b уникальна. Ошибка говорит об обратном. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2021, 13:13 |
|
Реализовать constraint
|
|||
---|---|---|---|
#18+
wsnet Запись master.a, master.b уникальна. Код: plsql 1. 2. 3. 4.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2021, 14:21 |
|
Реализовать constraint
|
|||
---|---|---|---|
#18+
SY wsnet Запись master.a, master.b уникальна. Код: plsql 1. 2. 3. 4.
SY. Раньше было именно так уникальное поле a в таблице. То есть можно было хранить записи в таблице: Код: plsql 1. 2. 3. 4. 5.
Сейчас при попытке ввести уникальную запись по двум полям a и b: Код: plsql 1. 2. 3. 4.
позволит хранить записи: Код: plsql 1. 2. 3. 4. 5.
А вот хранить (таких записей много в таблице на текущий момент) или добавить еще одну запись: Код: plsql 1.
Не получается из-за ошибки в посте 22284635 . Как обойти это средствами Oracle я не нашел поэтому и сделал FBI-индекс. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2021, 15:25 |
|
Реализовать constraint
|
|||
---|---|---|---|
#18+
wsnetКак обойти это средствами Oracle я не нашел поэтому и сделал FBI-индекс. А следовало вправить мозги тому чудаку, который так криво базу спроектировал. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2021, 15:47 |
|
Реализовать constraint
|
|||
---|---|---|---|
#18+
wsnet Сейчас при попытке ввести уникальную запись по двум полям a и b: Значит нет у тебя уникальности по a,b. Ты бы для начала выдал все требования. Хотя все твои проблемы стары как мир - нормализация: Код: 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. 77. 78. 79. 80. 81. 82. 83. 84.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2021, 15:51 |
|
Реализовать constraint
|
|||
---|---|---|---|
#18+
wsnet Вячеслав Любомудров, я же говорил, что поле дочерней таблицы detail.a ссылается на master.a, поле detail.b на master.b. Это ПОЛЯ. А тебе говорят о ЗАПИСЯХ. Вот есть у тебя 2 одинаковых записи (и в обеих NULL в поле A). На какую ИЗ НИХ должна ссылаться запись в дочерней таблице? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2021, 22:02 |
|
Реализовать constraint
|
|||
---|---|---|---|
#18+
wsnet SQL*Plus, в посте 22284458 сформулировал исходные данные. Нет. Там приведен набор команд - попытка решения задачи, которая четко не сформулирована. В процессе четкого формального описания вашей задачи, вы вполне можете наткнуться сами на её решение. Попробуйте. Сформулируете ваше ТЗ? Не надо писать КАК делать, напишите ЧТО вам нужно сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2021, 23:23 |
|
|
start [/forum/topic.php?fid=52&gotonew=1&tid=1880415]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
9ms |
get first new msg: |
8ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 257ms |
total: | 395ms |
0 / 0 |