|
|
|
Непонятность при удалении строк через updatable join view
|
|||
|---|---|---|---|
|
#18+
Все требования, которые необходимы выполняться для возможности удаления строк в таблице через подобные вью понятны: - во вью должна быть только одна таблица с сохранением ключей. Рассмотрим вью построенное из таблиц emp и dept: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Для таблицы emp существует primary key для столбца empno: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Теперь попробуем удалить запись с empno=7369: Код: plaintext 1. 2. 3. 4. 5. Смотрим описание ошибки: Код: plaintext 1. 2. 3. 4. 5. Все пречисленные причины отвергаются: no key preserved table - есть, это таблица emp, у неё есть первичный ключ, который вошёл во вью had more than one key-preserved table - Тоже неверно, есть еще только одна таблица во вью dept, но она не preserved-key key-preserved table was an unmerged view or a table from a read-only view - тоже не подходит. Теперь попробуем создать первичный ключ для dept для столбца deptno(изначально это нигде не требуется) Код: plaintext 1. 2. Попробуем удалить еще раз: Код: plaintext 1. 2. Получилось. Теперь кто мне обьяснит, где сказано что нужен данный первичный ключ для таблицы dept? Так как во вью должна быть только одна таблица с сохранением ключей и эта таблица emp, то для чего нужно иметь для таблицы dept в данном случае первичный ключ? Кто спец по updatable join view, кто обьяснит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2003, 10:55 |
|
||
|
Непонятность при удалении строк через updatable join view
|
|||
|---|---|---|---|
|
#18+
У меня есть у самого определённая мысль, что если нет primary key для dept на deptno, то появляется потенциальная возможность в таблице dept иметь для одного и того-же значения deptno несколько строк. В результате во вью столбец empno уже не будет уникальным и будет нарушено уловие key-preserved. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2003, 11:11 |
|
||
|
Непонятность при удалении строк через updatable join view
|
|||
|---|---|---|---|
|
#18+
А попробуйте на deptno вместо primary key unique constraint повесить, интересно будет работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2003, 11:17 |
|
||
|
Непонятность при удалении строк через updatable join view
|
|||
|---|---|---|---|
|
#18+
По теории не должно так как unique допускает NULL значение. А key-preserved table по определению не должен содержать NULL значений. Но щас проверю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2003, 11:26 |
|
||
|
Непонятность при удалении строк через updatable join view
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Сработало однако. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. А вот здесь я уже ничего не понимаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2003, 11:32 |
|
||
|
Непонятность при удалении строк через updatable join view
|
|||
|---|---|---|---|
|
#18+
Хотя стоп. NULL же у нас в dept, а не в emp, так что никакой ошибки нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2003, 11:33 |
|
||
|
Непонятность при удалении строк через updatable join view
|
|||
|---|---|---|---|
|
#18+
Но ведь foreign key может ссылаться не только на primary key в родительской табле но и на любое unique поле. NULLS во вью попасть не должны для них ведь не выполняется where e.deptno = d.deptno, даже если оба операнда NULL. Поэтому может и заработать. Хотя конечно зависит от того, как в Оракл это имплементировали, если решили нельзя значит нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2003, 11:36 |
|
||
|
Непонятность при удалении строк через updatable join view
|
|||
|---|---|---|---|
|
#18+
Выяснилось что можно:-) А если в emp добавить запись с deptno NULL, будет работать? Давайте проверим и это, раз уж вас тестовые таблицы созданы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2003, 11:44 |
|
||
|
Непонятность при удалении строк через updatable join view
|
|||
|---|---|---|---|
|
#18+
Я понимаю вам интересно, вы изучаете Oracle :) Но я могу с вероятность 99.9% сказать что в этом случае точно не получится. На ради вас... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2003, 11:48 |
|
||
|
Непонятность при удалении строк через updatable join view
|
|||
|---|---|---|---|
|
#18+
Есть в Application Developer Guide Fundamentals 9i Код: 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. Должно работать и с NULL DEPTO в EMP судя по всему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2003, 13:16 |
|
||
|
Непонятность при удалении строк через updatable join view
|
|||
|---|---|---|---|
|
#18+
И все же работает даже если есть нули в обеих таблицах! Код: 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. теперь Код: plaintext 1. 2. 3. 4. 5. 6. 7. ну и Код: plaintext 1. 2. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2003, 13:27 |
|
||
|
Непонятность при удалении строк через updatable join view
|
|||
|---|---|---|---|
|
#18+
У меня не работал inet, когда я уже подготовил сообщение. Но что-бы труд не пропал даром, решил всё-же опубликовать Код: 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. 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. 85. 86. 87. Мда.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2003, 13:39 |
|
||
|
Непонятность при удалении строк через updatable join view
|
|||
|---|---|---|---|
|
#18+
to Violina: Мне кажется ваш пример не совсем тот. Вы NULL добавляете не в тот столбец. Но мой точно правильный, и при этом работает. А вроде не должно. Уточню, что у меня 8i ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2003, 13:43 |
|
||
|
Непонятность при удалении строк через updatable join view
|
|||
|---|---|---|---|
|
#18+
to softbuilder Вот видите и Вы что то новое узнали. Не зря говорят - обучая мы учимся:-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2003, 13:44 |
|
||
|
Непонятность при удалении строк через updatable join view
|
|||
|---|---|---|---|
|
#18+
Проверила и в случае вставки NULL в emp.id - работает! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2003, 13:52 |
|
||
|
Непонятность при удалении строк через updatable join view
|
|||
|---|---|---|---|
|
#18+
Про NULL было написано в книге. В доке Application Developer’s Guide - Fundamentals Release 2 (8.1.6) Код: plaintext 1. 2. 3. 4. 5. Может несоответствие версий. В книге вроде как по 8.1.5 Попробую в 8.0.5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2003, 13:54 |
|
||
|
Непонятность при удалении строк через updatable join view
|
|||
|---|---|---|---|
|
#18+
Во результаты тестов на 8.0.5(обращаю внимание именно 8.0.5, а не 8.1.5): Код: 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. 43. 44. 45. Все вышесказанные утверждения из книги верны для 8.0.5. В самой книге как я понимаю даётся информация по 8.1.5 8.1.5 у меня нет, есть только 8.1.7 В 8.1.7 эти утверждения не работают. Вывод: от 8.1.5(которая была близка к 8.1.5) до 8.1.7(которая близка к 9i) произошли определённые изменения. Вопрос в том, как отвечать на экзамене? :(((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2003, 14:25 |
|
||
|
Непонятность при удалении строк через updatable join view
|
|||
|---|---|---|---|
|
#18+
Да, вопросы где нужно найти не просто правильный ответ среди других неправильных, а самый правильный ответ среди более менее правильных, самые каверзные. Остается надеятся что такие вопросы будут привязываться к версии Оракл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2003, 14:41 |
|
||
|
Непонятность при удалении строк через updatable join view
|
|||
|---|---|---|---|
|
#18+
Не хочу открывать новый топик, спрошу здесь. Есть параметры которые можно задать и в конф. файле и потом изменить через команду. Например The UNDO_RETENTION parameter can be set initially in the initialization parameter file that is used by the STARTUP process: UNDO_RETENTION = 10 The UNDO_RETENTION parameter value can be changed dynamically at any time using the ALTER SYSTEM command: ALTER SYSTEM SET UNDO_RETENTION = 5; Изменится ли после этой команды значение в конф. файле? Я попробовала сама, в файле init.ora вроде ничего не изменилось, но может быть я просто не тот файл смотрела. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2003, 14:53 |
|
||
|
Непонятность при удалении строк через updatable join view
|
|||
|---|---|---|---|
|
#18+
http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96521/create.htm#1014422 Но по-моему для PFILE SCOPE не предусмотрена, только для SPFILE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2003, 15:12 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32143206&tid=1990943]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
165ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
76ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 519ms |

| 0 / 0 |
