三流備忘録OracleのSQL PL/SQL 関数 ついての備忘録
ホーム >> PL/SQL備忘録 >> コレクションメソッド

コレクションメソッド

解説

コレクションを操作するメッソッド

構文例

CREATE OR REPLACE PROCEDURE DSNEOETS.collectiontest

IS
	
	/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	 ■ネストした表の宣言■
	++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  */
	TYPE hoge_type IS TABLE OF varchar2(100);
	
	/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	 ■変数の宣言/初期化■
	++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  */
	hoge1 hoge_type:=hoge_type('aaaa','bbbb','cccc','dddd');
	
	/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	 ■VARRAYの宣言■
	++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  */
	TYPE hoge_type2 IS VARRAY(5) OF varchar2(100);
	
	hoge2 hoge_type2:=hoge_type2('aaaa','bbbb','cccc','dddd');
	
	cnt	INTEGER;
	
BEGIN
	
	/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	 ■exists■ n番目の要素があった場合にTRUEを返す
	++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  */
	IF hoge1.exists(1) THEN
		DBMS_OUTPUT.PUT_LINE('要素あり');
	END IF;
	
	/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	 ■count■ 要素の数を返す
	++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  */
	DBMS_OUTPUT.PUT_LINE('要素の数:' || hoge1.count);
	
	
	/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	 ■limit■ 要素の最大数を返す。ネストした表、結合配列はNULLを返す
	++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  */
	DBMS_OUTPUT.PUT_LINE('要素の最大数:' || hoge2.limit);
	
	/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	 ■first■ 最初の索引番号を返す
	 ■last■  最後の索引番号を返す
	++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  */
	
	DBMS_OUTPUT.PUT_LINE('最初の索引番号:' || hoge1.first);
	DBMS_OUTPUT.PUT_LINE('最後の索引番号:' || hoge1.last);
	
	/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	 ■prior■ 前の索引番号を返す
	 ■next■  次の索引番号を返す
	++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  */
	cnt := hoge1.first;
	
	WHILE cnt IS NOT NULL 
	LOOP
	
		DBMS_OUTPUT.PUT_LINE('要素:' || hoge1(cnt));

		cnt := hoge1.next(cnt);
		
	END LOOP;
	
	/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	 ■extend■ ネストした表、VARRAYのサイズ大きくする
	 
	 extend 	: 1つのNULL要素追加
	 extend(n)	: n個のNULL要素追加
	 extend(n,i): i番目のコピーをn個追加
	++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  */
	DBMS_OUTPUT.PUT_LINE('追加前要素の数:' || hoge1.count);
	hoge1.extend;
	DBMS_OUTPUT.PUT_LINE('追加後要素の数:' || hoge1.count);
	
	/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	 ■trim■ ネストした表、VARRAYのサイズ小さくする
	 
	 trim 		: 末尾から1つの要素削除
	 trim(n)	: 末尾からn個の要素削除
	++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  */
	DBMS_OUTPUT.PUT_LINE('削除前要素の数:' || hoge1.count);
	hoge1.trim;
	DBMS_OUTPUT.PUT_LINE('削除後要素の数:' || hoge1.count);
	
	/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	 ■delete■ ネストした表、VARRAYのサイズ小さくする
	 
	 delete 	: コレクションから全ての要素削除
	 delete(n)	: n番目の要素削除
	 delete(m,n): m〜n番目の要素削除
	++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  */
	DBMS_OUTPUT.PUT_LINE('削除前要素の数:' || hoge1.count);
	hoge1.delete(2,3);
	DBMS_OUTPUT.PUT_LINE('削除後要素の数:' || hoge1.count);
	
EXCEPTION
	WHEN OTHERS THEN
		DBMS_OUTPUT.PUT_LINE('ERROR!!' || SQLERRM(SQLCODE));
		
END;