dポイントプレゼントキャンペーン実施中!

簡単なことだと思うのですが、はまってしまったので質問させてください。

以下のようなコードがあります。PL/SQLで書いてます。
SELECTした内容をFETCHして、IF文の%FOUNDで処理内容を変えているのですが、%FOUND=FALSEで必ず返ってきています。SELECT文自体でデータはひっぱって来ている(別で流しました)ようなので、理由が全然わからずまいってます。

--------------------------------------------------
FUNCTION get_siten_cd(siten_cd varchar2) RETURN varchar2 IS

ret_siten_cdvarchar(4);--4桁支店コード

/*カーソル定義*/
CURSOR cs is SELECT SITEN_CD FROM MEI1.SITEN_MST WHERE SITEN_CD3 = siten_cd;
/**カーソルに基づくレコードの定義**/
rs cs%ROWTYPE;

BEGIN

OPEN cs;

FETCH cs INTO rs;
IF cs%FOUND THEN
--データが存在する場合
ret_siten_cd := rs.SITEN_CD;
ELSE
--データが存在しない場合
ret_siten_cd := NULL;
END IF;

CLOSE cs;
RETURN ret_siten_cd;

END;
--------------------------------------------------

よろしくお願いします。

A 回答 (3件)

列名(SITEN_CD)と引数(siten_cd)が同じ名前だからかも。

    • good
    • 0
この回答へのお礼

正解ですw。
ってか、ダメなんですねこれ。知りませんでした。
なんたか自分で解決しました。

皆さん回答ありがとうございましたっ!

お礼日時:2004/12/16 23:43

こんばんは。



Functionの引数の「siten_cd」には、ちゃんと値が入っていますか?
SQLが行セットを返していないのが原因と思われますが・・・。
%ROWCOUNTは取れますか?
取れているならFETCHした時点で「rs」の中に入っているはずなので、dbms_output.put_lineで表示してみてください。

IF文の問題ではないと思いますよ。
(^^ゞ
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

皆さんの言われたことほとんどやってました。
SQLも別で流してますし、dbms_output.put_lineも使って変数の中身やら表示してました。ちょっと説明が足りませんでした。すみません。

ただ、どうしてもSQLの結果が取れてなくて。
オラクルマスターのプラチナ持ってる人も知らなかったみたいですw。

お礼日時:2004/12/16 23:48

文法的に間違いはないと思います。

そうなるとあとは、やはりSelectで1行も取得できていないという事になります。

実際に見えないところを疑うしかないのですが、siten_cdにはきちんと値が入っているのでしょうか。

あるいはrs.SITEN_CDには値は入っていないですか?(つまりFOUNDはFalseだけれど、実は成功しているパターン。あり得ないか・・・)

あとはcs%NOTFOUNDを使ってIF文を書き直してみるか・・・

すみません、考え付く限り書いてしまいました。何かのヒントにでもなればと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございますっ!

上にも書いてありますが、なかなか意外?なミスでした。

お礼日時:2004/12/16 23:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す