簡単なことだと思うのですが、はまってしまったので質問させてください。
以下のようなコードがあります。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;
--------------------------------------------------
よろしくお願いします。
No.2
- 回答日時:
こんばんは。
Functionの引数の「siten_cd」には、ちゃんと値が入っていますか?
SQLが行セットを返していないのが原因と思われますが・・・。
%ROWCOUNTは取れますか?
取れているならFETCHした時点で「rs」の中に入っているはずなので、dbms_output.put_lineで表示してみてください。
IF文の問題ではないと思いますよ。
(^^ゞ
回答ありがとうございます。
皆さんの言われたことほとんどやってました。
SQLも別で流してますし、dbms_output.put_lineも使って変数の中身やら表示してました。ちょっと説明が足りませんでした。すみません。
ただ、どうしてもSQLの結果が取れてなくて。
オラクルマスターのプラチナ持ってる人も知らなかったみたいですw。
No.1
- 回答日時:
文法的に間違いはないと思います。
そうなるとあとは、やはりSelectで1行も取得できていないという事になります。実際に見えないところを疑うしかないのですが、siten_cdにはきちんと値が入っているのでしょうか。
あるいはrs.SITEN_CDには値は入っていないですか?(つまりFOUNDはFalseだけれど、実は成功しているパターン。あり得ないか・・・)
あとはcs%NOTFOUNDを使ってIF文を書き直してみるか・・・
すみません、考え付く限り書いてしまいました。何かのヒントにでもなればと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) micropythonコード 修正 1 2023/06/13 17:22
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- その他(プログラミング・Web制作) micropython コードについて 2 2023/06/14 13:13
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
mysqlのcase文で複数の条件を指...
-
PL/SQLでカーソルを指定する方法
-
カーソル定義での条件分岐
-
PL/SQLでのSQL文法
-
PL/SQLカーソルの2重FORループ...
-
自動連番でカラムを更新したい
-
Texの枠囲み調節
-
Accessのマクロでモジュールを...
-
Access VBAで行ラベルが定義さ...
-
Statement ignored というエラー
-
VBA プロシージャの名前の取得
-
sqlplusのspoolで空白行出現
-
今日の日付が入った行のデータ...
-
sqlplusでヘッダーが付かない
-
エクセルVBAでUserFormを起動し...
-
callで順に実行されるプロシー...
-
ODBCリンクの際にACCESSでは読...
-
ストアド実行時のエラー「参照...
-
全角空白のTRIMができない...
-
SQLサーバで和暦から西暦に変換...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PL/SQLカーソルの2重FORループ...
-
PL/SQLでのSQL文法
-
Texの枠囲み調節
-
カーソル定義での条件分岐
-
自動連番でカラムを更新したい
-
ORA-00904:無効な識別子の回避...
-
PL/SQLのOPEN cursor_name FOR...
-
カーソルフェッチにて、最終レ...
-
文字列の置換
-
T-SQLのカーソルで
-
[Oracle9i]PL/SQLでFETCHしても...
-
PL/SQL カーソルのFROM句にカー...
-
PL/SQLでの参照
-
PL/SQLにて、マスタから取得し...
-
カーソルで集合関数を使った場...
-
カーソルループ内部でログを出力
-
【PL/SQL】LOOPした動的SQLにて...
-
PL/SQLのカーソルについて
-
PL/SQLでカーソルを指定する方法
-
ROW_NUMBER BY PL/SQL
おすすめ情報