■SI ObjectBrowser掲示板

ユーザの皆様、開発者、サポート担当者の交流のための掲示板です!discussion
ユーザーのみなさま同士で教え合ったり、アドバイスしたりする暖かい交流の場にしたいと思っていますので、相互協力をよろしくお願いします。なお、過去に同じようなQ&Aがあるケースも多いので、投稿前にキーワード検索してみてください。

※◆のカラーは投稿の対象となる製品に対応しています。【…OB …OBER …全般 ◇…その他】
※ライセンスに関するお問合せにつきましては、お問い合わせページよりご連絡いただきますようお願いいたします。
※誹謗中傷や公序良俗に反する書き込みはご遠慮ください。運営側の判断によりメッセージを削除する場合があります。
※環境依存や技術的調査が必要な問題については掲示板上ではお答えしかねます。ご了承ください。




デバッグ時のパラメータについて 2003/04/17 10:17:11
nishina

パラメータを渡してカーソル順検索をしようとしていますがうまくいきません。
どうもパラメータの値が渡されていないようで、データがあるのに取得できていません。
以下にソースを書きます。間違っている記述について教えていただけますでしょうか。

パッケージの内容
CREATE OR REPLACE PACKAGE TEST
IS
p_cutoff_dt DATE;
     p_manno VARCHARS(10);


--カーソルの宣言
CURSOR gc_syain IS
SELECT sya_id
FROM syain
WHERE edate = p_cutoff_dt
AND manno = p_manno;

PROCEDURE main(p_cutoff_dt IN OUT DATE
p_manno IN OUT VARCHARS);
PROCEDURE create(p_cutoff_dt IN OUT DATE
p_manno IN OUT VARCHARS);
END TEST;

パッケージボディの内容
CREATE OR REPLACE PACKAGE BODY TEST
IS

PROCEDURE main (p_cutoff_dt IN OUT DATE
p_manno IN OUT VARCHARS)
IS

BEGIN
TEST.create(p_cutoff_dt,p_manno);
END main;


PROCEDURE create (p_cutoff_dt IN OUT DATE
p_manno IN OUT VARCHARS)
IS
rec_sya gc_syain%ROWTYPE;
BEGIN

-- テーブル削除
DELETE AAAA;

COMMIT;

-- カーソルのオープン
OPEN gc_syain;

LOOP
-- カーソルの読みこみ
FETCH gc_syain INTO rec_sya;

-- データが無ければループを抜ける
EXIT WHEN gc_syain%NOTFOUND;
-- AAAAテーブルにデータを挿入
INSERT INTO AAAA (sya_kb)
VALUES (rec_sya.sya_kb);
COMMIT;

END LOOP;

-- カーソルのクローズ
CLOSE gc_syain;

COMMIT;

EXCEPTION
WHEN OTHERS THEN
-- カーソルがオープンしたままだったらカーソルのクローズ
IF gc_syain%ISOPEN THEN
CLOSE gc_syain;
END IF;

ROLLBACK;

COMMIT;

END create;

END TEST;
/

* PARAMETER VALUES *
P_CUTOFF_DT : 2003/03/20 00:00:00
P_MANNO : A0894

とパラメータはきちんと入っているようなんですが・・・
初心者です。なにとぞよろしくお願いします。
元の文章を引用して返信

Re: デバッグ時のパラメータについて 2003/04/17 11:52:56
はじめ
はじめと申します。

p_manno、p_cutoff_dtをパッケージの変数ではなく、
カーソルgc_syainのパラメータにすればいいと思います。

>p_cutoff_dt DATE;
>p_manno VARCHARS(10);
>
>CURSOR gc_syain IS
>SELECT sya_id
>FROM syain
>WHERE edate = p_cutoff_dt
>AND manno = p_manno;
    ↓
CURSOR gc_syain(p_cutoff_dt IN DATE,p_manno IN VARCHAR2) IS
SELECT sya_id
FROM syain
WHERE edate = p_cutoff_dt
AND manno = p_manno;

あとは、カーソルのオープンしている部分を
>OPEN gc_syain;
     ↓
OPEN gc_syain(p_cutoff_dt,p_manno);

に変更すればいけるんじゃないでしょうか。


元の文章を引用して返信

Re: デバッグ時のパラメータについて 2003/04/17 13:18:52
nishina
はじめ様、ありがとうございました。

>はじめと申します。
>
>p_manno、p_cutoff_dtをパッケージの変数ではなく、
>カーソルgc_syainのパラメータにすればいいと思います。
>
>>p_cutoff_dt DATE;
>>p_manno VARCHARS(10);
>>
>>CURSOR gc_syain IS
>>SELECT sya_id
>>FROM syain
>>WHERE edate = p_cutoff_dt
>>AND manno = p_manno;
>    ↓
>CURSOR gc_syain(p_cutoff_dt IN DATE,p_manno IN VARCHAR2) IS
>SELECT sya_id
>FROM syain
>WHERE edate = p_cutoff_dt
>AND manno = p_manno;
>
>あとは、カーソルのオープンしている部分を
>>OPEN gc_syain;
>     ↓
>OPEN gc_syain(p_cutoff_dt,p_manno);
>
>に変更すればいけるんじゃないでしょうか。
>
上記のようにした場合、p_cutoff_dt,p_mannoの値はどのようにして
渡したら良いのでしょうか?
元の文章を引用して返信

Re: デバッグ時のパラメータについて 2003/04/17 13:43:23
nishina
[nishina]
できましたぁ。

p_manno、p_cutoff_dtをパッケージの変数に残しつつ、
カーソルgc_syainのパラメータにしてみました。

p_cutoff_dt DATE;
p_manno VARCHARS(10);

CURSOR gc_syain(p_cutoff_dt IN DATE,p_manno IN VARCHAR2) IS
SELECT sya_id
FROM syain
WHERE edate = p_cutoff_dt
AND manno = p_manno;

カーソルのオープンしている部分を
OPEN gc_syain(p_cutoff_dt,p_manno);

p_cutoff_dt,p_mannoの値を外から与えてえ正しい結果を取得できました。

本当にありがとうございました。これからもよろしくお願いします。

元の文章を引用して返信