配列A…ソート済み
配列B…ソート済み
配列C…配列Aと配列Bをマージソート後の格納用。
idx_a…配列AのINDEX
idx_b…配列BのINDEX
-- 配列Aと配列Bを先頭項目の値の小さい方から順にマージソート
FOR i IN 配列A.FIRST..配列A.LAST + 配列B.LAST
LOOP
-- 配列Aの先頭項目の方が小さい
IF
配列A(idx_a).先頭項目の値 = LEAST(配列A(idx_a).先頭項目の値 配列B(idx_b).先頭項目の値)
THEN
配列C(i) := 配列A(idx_a); -- 配列Aを格納
idx_a := idx_a + 1; -- 配列AのINDEXを次に進める
-
- 配列Bの先頭項目の方が小さい
- 配列Bの先頭項目の方が小さい
ELSIF
配列B(idx_b).先頭項目の値 = LEAST(配列A(idx_a).先頭項目の値 配列B(idx_b).先頭項目の値)
THEN
配列C(i) := 配列B(idx_a); -- 配列Bを格納
idx_b := idx_b + 1; -- 配列BのINDEXを次に進める
END IF;
END LOOP;
で、配列Aと配列Bをマージソートして配列Cができる。合ってるかな。。
でも、プログラムでこんなことする必要があるときはテーブル構成がマズイよね。