ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

★Oracle PL/SQL★コミュの動的配列をプロシージャに引数として渡し、SELECT文の条件式にしたいです。

  • mixiチェック
  • このエントリーをはてなブックマークに追加
初めてのトピたて失礼致します。
現在、趣味でJavaからPL/SQLを呼び出して、検索・登録・更新処理を行うシステムの開発をやっております。
そこで、自分のやりたい事が実現できないため、皆さんのお力を拝借したいと重いまして、書かせていただきました。

----------PL/SQLコード 開始----------------

CREATE OR REPLACE TYPE VARCHAR2_ARRAY IS TABLE OF VARCHAR2(100);/

CREATE OR REPLACE PROCEDURE "TEST_PROCEDURE" (
result OUT SYS_REFCURSOR,
state IN VARCHAR2_ARRAY
) is
BEGIN
--SELECT文
OPEN result FOR
SELECT * FROM TEST_TABLE
WHERE STATE IN( state ) ; --IN句の条件を引数より取得したい
END;
/

----------PL/SQLコード 終了----------------


JAVAからは引数{state}へリスト形式で値を渡して、条件式のINの中身を動的にしたいと考えております。
分かりづらい説明かもしれませんが、皆さんのお力を貸していただくと幸いですm(_)m

コメント(5)

SELECT文自体を動的に作成すればいけないでしょうか?
>めびさん
お返事ありがとうございますm(_)M

動的にSELECT文の作成と言いますと・・・

申し訳ありません、PL/SQLに初めて触れるためか、イメージがわきませんのでもう少し詳しいアドバイスを戴けると幸いですm(_)m

私の至らなさが招いた質問かもしれませんが、
宜しく御願い致しますm(_)m
引越準備中につき調べないで記憶の断片でお話しますが・・・

めびさんの言う動的にってのは、javaで言うstringbuilderみたいなイメージですよ。
確かPL/SQLでも変数に文字列を追加する形で
変数 sqlString = select a, b, c from myTable where a in (
if(パラメタがあったら) then
 sqlString =+ 条件に追加
〜略〜
sqlString = );
sqlString.実行
みたいに出来た(昔現場で書いた)記憶があります。
あ〜、でもあの時はinじゃなくてandだったかなぁ。

正しい文法出せなくてご勘弁m(__)m 
イメージ的に、ほ(´∀`)りさんの言う通りですね

実際にPL/SQLでやると以下のような感じになるかと
環境が無く思いつくままに書いたのでこのまま動くか分かりませんが;
--------------------------
CREATE OR REPLACE PROCEDURE "TEST_PROCEDURE" (
result OUT SYS_REFCURSOR,
state IN VARCHAR2_ARRAY
) IS

stmt VARCHAR2(1000);

BEGIN
stmt := 'SELECT * FROM TEST TABLE WHERE STATE IN(';
-- ループにてIN句を作成する
FOR i IN 1..state.COUNT LOOP
stmt := stmt || '''' || state(i) || '''';
IF state.EXISTS(i+1) THEN
stmt := stmt || ',';
END IF;
END LOOP;
stmt := stmt || ')';

OPEN result FOR stmt;

END;
------------------------------
>ほ(´∀`)りさん & めびさん
ありがとうございますm(_)m
助言戴いた通りの組み方をしましたところ、何とかPL/SQLのコンパイルは確認できました♪
あとは、JAVAとの連携部分のコーディングをしっかりすれば、予想通りの動作ができそうです。

お忙しいなかお時間を割いて、助言していただきありがとうございますm(_)m

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

★Oracle PL/SQL★ 更新情報

★Oracle PL/SQL★のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング