回答編集履歴

1

前提が違ったので

2022/06/02 07:26

投稿

KOZ6.0
KOZ6.0

スコア2626

test CHANGED
@@ -1,23 +1,30 @@
1
- これでよさそうですね。
2
1
  ```SQL
3
2
  DECLARE
4
- CURSOR ASD IS
5
- SELECT A FROM D_TABLE WHERE A IS NOT NULL
6
- UNION
7
- SELECT B FROM D_TABLE WHERE B IS NOT NULL
8
- UNION
9
- SELECT C FROM D_TABLE WHERE C IS NOT NULL;
10
- TYPE HAIRETU_TBL IS TABLE OF D_TABLE.A%TYPE;
3
+ TYPE EXISTS_TYPE IS TABLE OF BOOLEAN INDEX BY D_TABLE.A%TYPE;
4
+ EXISTS_TBL EXISTS_TYPE;
5
+ TYPE HAIRETU_TYPE IS TABLE OF D_TABLE.A%TYPE INDEX BY BINARY_INTEGER;
11
- HAIRETU HAIRETU_TBL;
6
+ HAIRETU HAIRETU_TYPE;
7
+ PROCEDURE MAIN_LOOP(ITEM D_TABLE.A%TYPE)
8
+ IS
12
9
  BEGIN
10
+ IF ITEM IS NOT NULL THEN
11
+ IF NOT EXISTS_TBL.EXISTS(ITEM) THEN
12
+ EXISTS_TBL(ITEM) := TRUE;
13
+ HAIRETU(HAIRETU.COUNT + 1) := ITEM;
13
- OPEN ASD;
14
+ END IF;
15
+ END IF;
16
+ END;
17
+ BEGIN
14
- FETCH ASD BULK COLLECT INTO HAIRETU;
18
+ FOR R IN (SELECT A, B, C FROM D_TABLE)
19
+ LOOP
20
+ MAIN_LOOP(R.A);
21
+ MAIN_LOOP(R.B);
22
+ MAIN_LOOP(R.C);
15
- CLOSE ASD;
23
+ END LOOP;
16
24
  FOR i IN 1..HAIRETU.COUNT
17
25
  LOOP
18
26
  DBMS_OUTPUT.PUT_LINE(HAIRETU(i));
19
27
  END LOOP;
20
28
  END;
21
29
  ```
22
- ・UNION で重複は削除されます。
23
- ・バルクインサート NESTED TABLE まとめ格納でき
30
+ 格納してから削除はなく、存在していなかったら追加という風した