4

タイプがネストされたテーブルの 2 つの PLSQL 配列があります。

TYPE nested_typ IS TABLE OF VARCHAR2(21);

nt1 nested_typ := nested_typ('abc','def','123');
nt2 nested_typ := nested_typ('123');

上記の例について、これら2つのコレクションの違いを知りたい: 'def', 'abc'

これを行う簡単な方法を提案してください。

ありがとう...

4

2 に答える 2

6

これらは単純な型であるため、PL/SQL のセット比較演算子を使用できます。あなたの場合、使用したい(SQL演算子MULTISET EXCEPTと同じように機能します)。MINUS3 番目のネストされたテーブルを指定すると、次のようにコーディングできます。

nt3 := nt1 multiset except nt2;

詳細をご覧ください


「配列に重複する要素がない場合、これは正常に機能します... nt1 で出現する '123' をすべて削除する他の方法はありますか?」

はい、使用しますmultiset except distinct

多くのコレクション演算子があります。予想どおり、これらは PL/SQL ドキュメントでカバーされています。 ここで見つけてください

于 2012-08-09T10:58:38.967 に答える
1

基本的に、ネストされたテーブルにはマイナス機能を使用します。10g には、MULTISET EXCEPT と呼ばれる新しい機能があります。マイナスの出力を変数に保存する場合は、以下の手順に従ってください

declare var1 <nested table type>

コードの開始セクションで、以下のコードを記述してマイナス出力を取得します

var1:=var2 multiset except var3;

これをチェックしてください

Declare     
  TYPE nested_typ IS TABLE OF VARCHAR2(21); 
  nt1 nested_typ := nested_typ('abc','def','123');     
  nt2 nested_typ := nested_typ('123');    
  nt3 nested_typ;    
Begin
  nt3 := nt1 multiset except nt2; 
  dbms_output.put_line(nt3(1)||' '||nt3(2));  
end;

お役に立てれば。

于 2012-08-09T17:46:09.147 に答える