2016-10-25 3 views
0

テーブルの1つの属性から別のデータを読み込み、配列変数に挿入したいと考えています。考えられるデータはvarchar2型です。その後、私はこのデータを 'where'条件で配列に書いて使いたいと思っています。だから、一般的に私はこのようなSTHをしたいと思います。もちろんDBから配列変数へのデータの挿入(PL/SQL)

TYPE genreArray IS VARRAY(50) OF VARCHAR2(12); 
genres genreArray; 

BEGIN 
    FOR a IN (SELECT DISTINCT genre FROM books) LOOP 
    genres(a) := uniqe GENRE* 

*私は、インターネット上の私の質問への答えを見つけることができなかったため、この行が間違っています。

私はプログラムの実行中に要素の数を定義する動的配列のようなものを使うことができますか?

SELECT sth WHERE sth AND GENRE=genres(i) 

iはループのための変数であると仮定すると:別のような選択、私はそれを使用することができれば

そして、私の最後の質問です。

ご協力いただきありがとうございます。

+0

ネストした表ではなく、「varray」を使用する理由はありますか? –

+0

私はこのデータをDBに保存したくありません。私はsthを計算し、結果を表示したいと思います。 – monterinio

+0

PL/SQLには、連想配列、ネストした表、およびVARRAYという3つの異なるタイプのコレクションがあります。ネストした表が最も一般的ですが、VARRAYは非常にまれにしか使用されません。データベースにデータを保存する必要はありません。それらはすべてメモリに保存されています。 –

答えて

2

varrayを使用する特別な理由がない場合は、ネストした表を使用する方がずっと自然です。

DECLARE 
    TYPE genre_nt IS TABLE OF varchar2(12); 
    l_genres genre_nt; 
BEGIN 
    SELECT DISTINCT genre 
    BULK COLLECT INTO l_genres 
    FROM books; 

    FOR i IN 1 .. l_genres.count 
    LOOP 
    dbms_output.put_line(l_genres(i)); 
    END LOOP; 
END; 
関連する問題