- 締切済み
【PL/SQL】IF文( EXIT WHEN )でプロシージャの実行結果から判断させたい
Oracleで動くPL/SQLを作成してます。 プロシージャの実行結果をIF文に入れて、 実行結果からさらに処理を走らせたいのですが エラーが出てしまいます。 例) CREATE PROCEDURE TEST1(id NUMBER) BEGIN select NAME from TBLA where DID = id and ROWNUM <= 1; END; CREATE PROCEDURE TEST2(id NUMBER) BEGIN LOOP EXIT WHEN ( TEST1(id) is not null );☆ここがうまくいかない。 id := id + 1; END LOOP; END; TEST2のCreate時にTEST1は関数として存在しないというエラーメッセージが表示されます。 IF(EXIT WHEN)文中からはずして TEST1(id)のみの実行では、エラーが起きず IF文に入れるとエラーが起きるところまでは分かりました。 例はかなり簡略しているのですが、 どうしたらうまく動くのか分かる方がいれば 教えてもらいたいです。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- JagdPandar
- ベストアンサー率53% (29/54)
引数に"OUT"を付けることで対応可能 ---- CREATE OR REPLACE PROCEDURE TEST1( id IN NUMBER, NAME1 OUT VARCHAR2,--型は適当、実装にあわせて変更して TYPE1 OUT VARCHAR2 )IS -- ↑これ BEGIN SELECT NAME,TYPE INTO NAME1,TYPE1 FROM TBLA WHERE DID = id AND ROWNUM <= 1; END; / で、TEST1をこう呼ぶ CREATE OR REPLACE PROCEDURE TEST2(id IN NUMBER) IS vNAME VARCHAR2(100);--これも適当なんで vTYPE VARCHAR2(100); BEGIN LOOP TEST1(id,vNAME,vTYPE);--これ EXIT WHEN ( vTYPE is not null ); id := id + 1; END LOOP; END; /
- JagdPandar
- ベストアンサー率53% (29/54)
そのエラーメッセージの通りです。 PROCEDUREは関数ではありません。関数はFUNCTIONで作ります。
補足
反応ありがとうございます。 例が悪かったので補足します。 プロシージャTEST1では複数の項目の値を返します。 ( select NAME,TYPE into NAME1, TYPE1 from TBLA where DID = id and ROWNUM <= 1;) FUNTIONでは1個の値しか返さないという理解なので PROCEDUREで作ろうとしています。 こういう場合の決まり文法などがあるようでしたら ご教授いただけないでしょうか?