• 締切済み

【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文に入れるとエラーが起きるところまでは分かりました。 例はかなり簡略しているのですが、 どうしたらうまく動くのか分かる方がいれば 教えてもらいたいです。

みんなの回答

回答No.2

引数に"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; /

回答No.1

そのエラーメッセージの通りです。 PROCEDUREは関数ではありません。関数はFUNCTIONで作ります。

noname#245798
質問者

補足

反応ありがとうございます。 例が悪かったので補足します。 プロシージャTEST1では複数の項目の値を返します。 ( select NAME,TYPE into NAME1, TYPE1 from TBLA where DID = id and ROWNUM <= 1;) FUNTIONでは1個の値しか返さないという理解なので PROCEDUREで作ろうとしています。 こういう場合の決まり文法などがあるようでしたら ご教授いただけないでしょうか?

関連するQ&A