質問: Oracle 11GでROWTYPEの変数を別のProcedureに渡したいと思い 下記のようなコードを記載しているのですが 呼出し元のPROCEDURE作成時に下記のようなエラーになってしまいます。 ROWTYPEについては、引数として使用できないのでしょうか。 また、間違っている場合はご指摘ください。 * エラー内容 エラー内容:PLS-00306: 'TEST_P02'の呼出しで、引数の数または型が正しくありません。 * 呼び出し元 ``` CREATE OR REPLACE PROCEDURE TEST_P01 AS cursor curTest() is SELECT a FROM table; buf table%ROWTYPE; BEGIN FOR buf in curTest() LOOP TEST_P02(buf); END LOOP; END; ``` * 呼び出し先 ``` CREATE OR REPLACE PROCEDURE TEST_P02(buf IN table%ROWTYPE) AS 略 END; ```
回答: 明示カーソルFOR LOOP文 を使う場合は buf(正式にはカーソル・レコードって言うんだったか?)は定義は不要です。 TEST_P01のbufはtable.a だけの1列しかないなのに対し、TEST_P02(buf IN table%ROWTYPEなので、テーブルかビューかの全列の指定になっているからおかしいよ、って怒られているようです。 TEST_P02(in_a IN table.a%TYPE としたらどうでしょうか?