|
|
|
Вставка записей в таблицу
|
|||
|---|---|---|---|
|
#18+
Всем привет. Есть задача: Для клиента, созданного в предыдущем запросе, (найти можно по максимальному id клиента), продублировать заказы всех клиентов за 1990 год. (Здесь будет 2 запроса, для дублирования заказов и для дублирования позиций заказа). Сразу поясню: есть две таблицы. Первая хранит номер заказа, вторая - позиции в заказе. С первым запросом проблем не было. А как второй сделать не могу понять. Проблема заключается в том, что при выполнение первого запроса вставится три записи в первую таблицу и у них будут уникальные id, которые вставляются с помощью триггера. Затем во вторую таблицу вставляю позиции товаров, но возникает проблема как мне соотнести к новому id несколько позиций? Т. е. конкретно для моего примера, в первом запросе у меня выбралось 3 записи, для этих трех записей существует 23 записи во второй таблицы (связь один ко многим): для первой записи - 8 записей из второй таблицы, для второй записи - 8 записей из второй таблицы и для 3 записи - 7 записей из второй таблицы. И я не могу понять как соотнести для первой записи ( с новым id) 8 записей и так далее. Вставляю через select В общем пните в нужном направлении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 11:02 |
|
||
|
Вставка записей в таблицу
|
|||
|---|---|---|---|
|
#18+
Elic, спасибо, понял идею!) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 11:36 |
|
||
|
Вставка записей в таблицу
|
|||
|---|---|---|---|
|
#18+
что-то написал, но ошибки полезли( вот первый запрос: insert into orders (order_date, order_mode, customer_id, order_status, order_total, sales_rep_id, promotion_id) select o.order_date, o.order_mode, ( select max(c.customer_id) from customers c ) as customer_id, o.order_status, o.order_total, o.sales_rep_id, o.promotion_id from orders o where o.order_date >= date'1990-01-1' and o.order_date < date '1991-01-1' ; вот второй: insert into order_items (order_id, line_item_id, product_id, unit_price, quantity) select ( select a.order_id from ( select * from orders o where o.customer_id = ( select max(c.customer_id) from customers c ) ) a join ( select * from orders o where o.order_date >= date'1990-01-1' and o.order_date < date '1991-01-1' order by o.order_id ) b on a.order_date = b.order_date and a.order_id != b.order_id where b.order_id = oi.order_id ) as order_id, oi.line_item_id, oi.product_id, oi.unit_price, oi.quantity from order_items oi where exists ( select o.order_id from orders o where o.order_date >= date'1990-01-1' and o.order_date < date '1991-01-1' and o.order_id = oi.order_id ) order by oi.order_id ; а ошибки следующие: ORA-04091: table NETCRACKER.ORDER_ITEMS is mutating, trigger/function may not see it ORA-06512: at "NETCRACKER.INSERT_ORD_LINE", line 4 ORA-04088: error during execution of trigger 'NETCRACKER.INSERT_ORD_LINE' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 11:55 |
|
||
|
Вставка записей в таблицу
|
|||
|---|---|---|---|
|
#18+
Person2713 , есть такая кнопочка, с надписью SRC . Выделили текст запроса, нажали кнопочку, и всем читать удобно и приятно... Person2713 Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. вот второй: Код: 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. а ошибки следующие: ORA-04091: table NETCRACKER.ORDER_ITEMS is mutating, trigger/function may not see it ORA-06512: at "NETCRACKER.INSERT_ORD_LINE", line 4 ORA-04088: error during execution of trigger 'NETCRACKER.INSERT_ORD_LINE' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 12:00 |
|
||
|
Вставка записей в таблицу
|
|||
|---|---|---|---|
|
#18+
Viewer, я забыл, про неё извеняюсь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 12:01 |
|
||
|
Вставка записей в таблицу
|
|||
|---|---|---|---|
|
#18+
Person2713...Для клиента, созданного в предыдущем запросе, (найти можно по максимальному id клиента)... RETURNING ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 12:31 |
|
||
|
Вставка записей в таблицу
|
|||
|---|---|---|---|
|
#18+
_Llocust, можете пояснить свой ответ, я не понимаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 13:02 |
|
||
|
Вставка записей в таблицу
|
|||
|---|---|---|---|
|
#18+
Person2713_Llocust, можете пояснить свой ответ, я не понимаю Очень плохо, что клиента, созданного в предыдущем запросе, вы собираетесь искать по максимальному id клиента. Т.к. если с системой одновременно работают 2 и более людей никто не гарантирует что вы получите "своего" клиента. Собственно для получений id созданной записи есть специальная кляуза. Ну а по вашему основному вопросу - хоть приведите тексты других объектов (триггеров) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 14:48 |
|
||
|
Вставка записей в таблицу
|
|||
|---|---|---|---|
|
#18+
По говорил с преподавателем и он объяснил в чем проблема. Проблема заключалась в том, что в таблице order_items был плохо написанный триггер для PK, а именно при вставке следующей записи он ссылался на предыдущее значение PK. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 23:14 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39412475&tid=1886339]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
159ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 473ms |

| 0 / 0 |
