プロシージャの配列内の重複した値の削除の仕方
いつもお世話になっております。配列について質問です。
プロシージャ内で作成した配列内に重複した値があると仮定します。
そこで配列内にある重複した値を削除したいのですが、削除できないでいます。
また追加で質問ですが、PL/SQLでは変数同士の比較ができないのでしょうか?
ご存じの方がおりましたら、教えていただけないでしょうか。
かれこれ5時間ほど悩んでいます。
| 内容 | |
|---|---|
| 質問1 | 配列内にある重複した値を削除 |
| 質問2 | PL/SQLでは変数同士の比較 |
A,B,Cはカラムは違いますが同じ型です。
SQL
1 2 3CURSOR ASD IS 4 SELECT A,B,C FROM D_TABLE; 5 6BEGIN 7OPEN ASD ; 8 LOOP 9 FETCH ASD INTO CUR; 10 EXIT WHEN ASD %NOTFOUND; 11 12 FOR i IN 1..3 LOOP 13 IF i = 1 THEN 14 Cur_ABC:= CUR.A; 15 END IF; 16 17 IF i = 2 THEN 18 Cur_ABC:= CUR.B; 19 END IF; 20 21 IF i = 3 THEN 22 Cur_ABC:= CUR.C; 23 END IF; 24 25 IF Cur_ABCIS NOT NULL THEN 26 HAIRETU(VNO8):=Cur_ABC; 27 VNO8:=VNO8+1; 28 end if ; 29 END LOOP; 30 END LOOP; 31CLOSE ASD;
質問に実際のコードを提示しないでアドバイスを求められても?
配列はどうやって値を設定したのでしょうか?SELECT DISTINCT ... で取得した結果を配列にすれば済むことでは?
比較はIFやCASEが使えます。
VARRAY は削除できません。NESTED TABLEなら出来ます。
https://docs.oracle.com/cd/E15817_01/appdev.111/e05670/collections.htm#CJAFGFIG
修正いたしました。IF,CASEだと値にかかわらず判定が偽になってしまいます。
KOZ6.0さん
NESTED TABLEの際の削除方法が調べても、分からないので教えてもらえませんでょうか?
>IF,CASEだと値にかかわらず判定が偽になってしまいます。
提示されたコードのどこでその現象が起きるのでしょうか?
たしかに IF で変数と変数を比較して、どちらかが NULL なら、どのような比較をしても偽になりますが・・・
>NESTED TABLEの際の削除方法が調べても、分からないので教えてもらえませんでょうか?
提示したURLにコード例が載ってるんですが・・・
CREATE TABLE D_TABLEがないし、
DECLARE
がないし、
CUR, Cur_ABCの定義もない。
END LOOP;が1つしかない。
CLOSE ASD;
もない。
PL/SQLの最後に記述されるはずの
END;
/
もない。
エラーメッセージは表示された内容をそのまま質問に載せてください。
回答1件
あなたの回答
tips
プレビュー