Pro * CからPL / SQLパッケージ・カーソルを使用するための最良の方法
-
26-09-2019 - |
質問
私はPL / SQLで定義されたカーソルを持っている、と私は最善の方法は、のプロからそれを使用するかを疑問に思っCです。通常のPro のCで定義されたカーソルのためにあなたがします。
EXEC SQL DECLARE curs CURSOR FOR SELECT 1 FROM DUAL;
EXEC SQL OPEN curs;
EXEC SQL FETCH curs INTO :foo;
EXEC SQL CLOSE cusr;
私は同じ(または類似)の構文は、パッケージ・カーソルのために働くだろうと期待していました。例えば、私は宣言
で、パッケージMYPACKを持っていますtype MyType is record (X integer);
cursor MyCurs(x in integer) return MyType;
今、私は仕事への構文の最初のスタイルを得ることができなかったとして、いフェッチなど、私のPro * Cコードにカーソルをオープンし、埋込みPL / SQLのかなり不満足な部分を持っています。 例を使用して
EXEC SQL EXECUTE
DECLARE
XTable is table of MyPack.MyType;
BEGIN
OPEN MyPack.MyCurs(:param);
FETCH MyPack.MyCurs INTO XTable;
CLOSE MyPack.MyCurs;
END;
END-EXEC;
ん誰も知っているより多くの "ピュア" のPro * Cのアプローチがある場合は?
解決
これは、実際の念カーソルの定義は、パッケージ仕様ではなくパッケージ本体であることを確認、あなたの最初の例よりもはるかに違うではないでしょう。それをない「宣言」を行うだけのようなもので行くます:
データベースオブジェクト:
create or replace package mypkg as
cursor mycur is
SELECT 1 FROM DUAL;
end;
のPro * Cでます:
EXEC SQL OPEN schema.mypkg.mycur;
EXEC SQL FETCH schema.mypkg.mycur INTO :foo;
EXEC SQL CLOSE schema.mypkg.mycur;
もちろんパッケージは、パッケージがユーザーの接続が所有、または代わりに同義語、存在している場合は、あなたがに接続されているoracleユーザーなどにアクセスできるようにする必要があるだろう「スキーマが。」 Pro * Cの呼び出しでは必要ありません。
他のヒント
はい。用語REF CURSOR上のGoogle検索を行うと、あなたが何をしたいの例を参照してくださいする必要があります。
所属していません StackOverflow