Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вставка строки с проверкой
|
|||
|---|---|---|---|
|
#18+
Решил эту задачу на программном уровне а хотелось бы на уровне бд Есть 2 таблицы Таблица А (AID, NAME) Таблица B (BID, COL1, COL2, COL3) AID и BID sequence колонки Допустим пользователь запускает следующий скрпит insert into B (COL1, COL2, COL3) values ("Example111","Example222","Example333") БД должна проверить если в таблице A в колонке name строка с Example111 и возратить ее AID если нету то соотвественно создать новую запись и возратить ее AID И в окончательном скрипте изменить Example111 на AID т.е. получится следующее insert into B (COL1, COL2, COL3) values (AID, "Example222","Example333") Подскажите хоть с чего начать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2007, 18:30 |
|
||
|
Вставка строки с проверкой
|
|||
|---|---|---|---|
|
#18+
Я, возможно, торможу (все-таки вечер пятницы), но более красивого решения, чем банальный триггер я здесь не вижу. Начать, соответственно, с изучения триггеров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2007, 18:55 |
|
||
|
Вставка строки с проверкой
|
|||
|---|---|---|---|
|
#18+
-=Koba=-БД должна проверить если в таблице A в колонке name строка с Example111 и возратить ее AID если нету то соотвественно создать новую запись и возратить ее AID Подскажите хоть с чего начать. Начинать нужно с unique constraint 'ов. Создать этот самый констрейнт, а потом смело добавлять строки в таблицу, и ловить ошибку (либо в хранимой процедуре, либо в приложении) unique_violation Триггеры здесь не к месту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2007, 23:12 |
|
||
|
Вставка строки с проверкой
|
|||
|---|---|---|---|
|
#18+
Так что здесь будет лучше Я уже 2 часа над тригерами потею ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2007, 23:17 |
|
||
|
Вставка строки с проверкой
|
|||
|---|---|---|---|
|
#18+
-=Koba=-уже 2 часа над тригерами потеюconstraint создали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2007, 00:32 |
|
||
|
Вставка строки с проверкой
|
|||
|---|---|---|---|
|
#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. 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2007, 02:59 |
|
||
|
Вставка строки с проверкой
|
|||
|---|---|---|---|
|
#18+
Спасибо. пошел применять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2007, 11:41 |
|
||
|
Вставка строки с проверкой
|
|||
|---|---|---|---|
|
#18+
Vladimir Sitnikov -=Koba=-БД должна проверить если в таблице A в колонке name строка с Example111 и возратить ее AID если нету то соотвественно создать новую запись и возратить ее AID Подскажите хоть с чего начать. Начинать нужно с unique constraint 'ов. Создать этот самый констрейнт, а потом смело добавлять строки в таблицу, и ловить ошибку (либо в хранимой процедуре, либо в приложении) unique_violation Триггеры здесь не к месту. А что больше будет тормозить ошибка ERROR: duplicate key violates unique constraint "..." или проверка в триггере , есть ли уже такая запись ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2007, 15:19 |
|
||
|
Вставка строки с проверкой
|
|||
|---|---|---|---|
|
#18+
Vladimir SitnikovТриггеры здесь не к месту. Неправильно понял условие. В самом деле, триггер нужен. serejaaА что больше будет тормозить ошибка ERROR: duplicate key violates unique constraint "..." или проверка в триггере , есть ли уже такая запись ? Если делать проверку, делать её нужно правильно. Если вы не меняли уровень изоляции транзакций (который по-умолчанию равен read commited), то, может случиться так, что между вашей проверкой и следующим действием кто-то такую строку добавит (== insert может вернуть duplicate key exception даже после проверки "if not found"). Поэтому, в коде триггера trgf_b_trick _нужно_ обрабатывать duplicate key в случае insert'а (в данном случае, можно просто проигнорировать это исключение) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2007, 15:41 |
|
||
|
Вставка строки с проверкой
|
|||
|---|---|---|---|
|
#18+
Vladimir SitnikovЕсли делать проверку, делать её нужно правильно. Если вы не меняли уровень изоляции транзакций (который по-умолчанию равен read commited), то, может случиться так, что между вашей проверкой и следующим действием кто-то такую строку добавит (== insert может вернуть duplicate key exception даже после проверки "if not found"). Поэтому, в коде триггера trgf_b_trick _нужно_ обрабатывать duplicate key в случае insert'а (в данном случае, можно просто проигнорировать это исключение) Я только набросал идею, а вообще ты прав. Если поправить триггер, то выйдет так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ___________________ Sorry for my Russian ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2007, 23:27 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=34552902&tid=2005411]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
68ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 259ms |
| total: | 451ms |

| 0 / 0 |
