3
다음 삽입 작업을 수행하는 가장 좋은 방법은 무엇입니까? 나는 주변을 둘러 보았고, 나는 막혔다.Pl/PgSQL, 헤더 행이있는 테이블 두 개를 삽입하십시오.
내가 현재 가지고있는 테이블 (삽입) 나는 다음과 같은 두 개의 테이블에 이러한 항목을 삽입해야
| id | order_id | item_id | type | group |
| 1 | 1 | 1 | 2 | 1 | <- type 2 represents a "header" item, or a "kit"
| 2 | 1 | 2 | 1 | 1 | <- type 1 represents a member of the "kit"
| 3 | 1 | 3 | 1 | 1 |
| 4 | 1 | 4 | 2 | 2 | <- New group means new kit
| 5 | 1 | 2 | 1 | 2 |
| 6 | 1 | 5 | 1 | 2 |
:
1) item_entry이
| id | mode | tmplt_id | item_id | parent_item_entry_id |
| 1 | 1 | 1 | NULL | NULL | <- This is a header line, mode 1
| 2 | 2 | NULL | 2 | 1 | <- This is a sub line, mode 2
| 3 | 2 | NULL | 3 | 1 | <- parent_item_entry_id references the header it belongs to
| 4 | 1 | 4 | NULL | NULL |
| 5 | 2 | NULL | 2 | 4 |
| 6 | 2 | NULL | 5 | 4 |
2)
| id | item_entry_id | order_id | group |
| 1 | 1 | 1 | 1 |
| 2 | 4 | 1 | 2 | <- only header information is necessary
을 item_entry_details
물론 item_entry.id가 구동됩니다. f의 시퀀스 (item_entry_id_seq). 이 방법을 사용할 수있는 우아한 방법이 있습니까? 나는 현재 각 그룹을 반복하며, 먼저 변수에 nextval()을 할당 한 다음 그룹의 각 항목을 반복하여 테이블에 기록합니다.
FOR recGroup IN SELECT DISTINCT group FROM insert LOOP
intParentItemEntryID := nextval('item_entry_id_seq');
FOR recLine IN SELECT * FROM insert LOOP
INSERT INTO item_entry VALUES (CASE intParentItemEntryID/DEFAULT, CASE 1/2, CASE recLine.item_id/NULL, CASE NULL/recLine.item_id, CASE NULL/intParentItemEntryID)
INSERT INTO item_entry_details VALUES (DEFAULT, intParentItemEntryID, recLine.order_id, recLine.group);
END LOOP;
END LOOP;
더 좋은 방법이 있습니까, 아니면 위와 같은 방법으로 삽입 할 수 있습니까?
감사합니다! 나는 방법이 있어야한다는 것을 알았고, 나는 그것을 알아낼 수 없었다. – BedderDanu