2017-03-22 8 views
0

から特定の要素を削除する:は、私は以下のようにネストした表のタイプを作成して、ネストした表

CREATE OR REPLACE TYPE STRING_ARRAY AS TABLE OF VARCHAR2(1000); 

そして、私は、配列から特定の要素を削除するにはいくつかの方法を持っていると思います。 など。

AVC_NAMES := STRING_ARRAY('ALEX', 'BETTY', 'CARL', 'DONALD'); 
SP_EXCLUDE(AVC_NAMES, 'BETTY'); // this will remove BETTY from the array. 

特定の要素を配列から削除できるネストしたテーブルには、ビルドインメソッドがありますか?または、私はs.p.を書くべきですか?仕事をするには?

答えて

2

Multisetを試してください。マルチセット演算子は、2つのネストした表の結果を1つのネストした表に結合します。

result := collection1 MULTISET EXCEPT collection2

declare 
type mycollection is table of varchar2(10); 
    c1 mycollection := mycollection('A','B','C','D','E'); 
    to_remove mycollection := mycollection('C'); 
begin 
    c1 := c1 multiset EXCEPT to_remove; 
for i     in c1.first..c1.last 
    loop 
    dbms_output.put_line(c1(i)); 
    end loop;  
end; 
0

このスニペットが役立ちます。

SET serveroutput ON; 
DECLARE 
    lv number_ntt; 
    lv_out number_ntt; 
    rem_value NUMBER:='&Enter_val'; 
BEGIN 
    lv:=number_ntt(1,2,3,4,5,6); 
    SELECT COLUMN_VALUE BULK COLLECT 
    INTO lv_out 
    FROM TABLE(lv) 
    WHERE COLUMN_VALUE NOT IN (rem_value); 

    lv:=lv_out; 
    FOR i     IN lv.FIRST..lv.LAST 
    LOOP 
    dbms_output.put_line(lv(i)); 
    END LOOP; 
END; 
+0

しかし 'lv'はまだ削除された値を含んでいないのですか? – Nitish

+0

はい、あります。しかし、私はlv_outを使っています。 out変数にのみlvを使用できます。 –

+0

私はより良いpictueのために私は答えplzのチェックを編集しました –

関連する問題