Pro * CからPL / SQLパッケージ・カーソルを使用するための最良の方法

StackOverflow https://stackoverflow.com/questions/3023380

  •  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検索を行うと、あなたが何をしたいの例を参照してくださいする必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top