- ベストアンサー
PL/SQLに関して
PL/SQLに関しての質問です。 1、プロシージャの内部にファンクションをネストするなどということはできるのでしょうか? (内部ファンクションのような感じで) 2、プロシージャからファンクションを呼び出し、ファンクションの戻り値をレコード型変数にした場合、ファンクションでSELECTしたレコード件数が0件であった場合、例外ブロックのWHEN no_data・・・THEN で、RETURN NULLで戻すことはできるでしょうか? (呼び出し側で、レコード型変数にNULLを代入できますか?) 3、ObjectBrowserからストアドプロシージャを実行するとき、引数ありのストアドプロシージャを実行する方法を教えてください。(または参考WEBサイトを教えてください。) いずれも、試す環境が今ないため、ご回答のほどよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
1.できますよ。通常の内部PROCのように宣言とコーディングすれば使用できます。 2.ファンクション内でカーソルを使用してカーソルをOpenし、Fetchでデータ取得を実行したあとにカーソルをCloseする前に『IF Cursor名%NOTFOUND then』で対応もできますが、通常カーソルを使用してOpen・Fetchした場合、Notfoundの場合定数にはnullがセットされる(というか何も取得できないので初期処理でnullクリアしておけばnullのまま)のでnullがリターンされるはず。 レコード型で定義されている定数に対しnullを代入するとレコード全体の項目に対しnullがセットされます。 3.ObjectBrowserは実行時、引数を入力するための画面が表示されます。
- 参考URL:
- http://www.sint.co.jp/
その他の回答 (1)
- ossan_hiro
- ベストアンサー率66% (88/132)
あまり自信がありませんが・・・。 1、について 可能です。 2、について たぶんNULLに設定することは可能ですが、 NULLの判定ができない(フィールドに対してチェックする方法しかない)と思います。 いっそのこと、そのままNO_DATA_FOUNDをRAISEしてしまう (もちろん呼び出し元のexceptionでCATCHしてあげる) 方法はどうでしょうか? 3、について ObjectBrowserは昔使った記憶をたどると、実行したときに 引数に何を入れるかダイアログのような入力画面が出た ような気がします。
お礼
1、ありがとうございます。出来ることが分かっただけでも助かりましたので、具体的な方法は調べてみます。 2、NO_DATA_FOUNDをRAISEして、呼び出し元のexceptionでCATCHしたりできるのですね。NO_DATA_FOUNDかその他のエラーなのか呼び出し元で知りたかったので役に立ちました。 3、引数の入力箇所が出てきました。 ありがとうございました。
お礼
1、ありがとうございます。出来るということですので、あとは調べてみます。 2、 >レコード型で定義されている定数に対しnullを代入すると >レコード全体の項目に対しnullがセットされる ということでしたので、RETURN BOOLEANで結果を戻して、OUTPUTのレコード型変数は引数にしました。 3、引数の入力箇所が出てきました。 ありがとうございました。