回答編集履歴
1
前提が違ったので
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
|
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_T
|
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
|
-
|
14
|
+
END IF;
|
15
|
+
END IF;
|
16
|
+
END;
|
17
|
+
BEGIN
|
14
|
-
FET
|
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
|
-
|
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
|
-
|
30
|
+
格納してから削除ではなく、存在していなかったら追加という風にしてみました。
|