2012-01-11 14 views
0

私はテスト用にOracle 11gR2のインスタンスをローカルに実行しています。私は、VC++を使ってOLEDBに接続しています。私はCCommandを使用して、テーブルから選択、更新、挿入、および削除ができます。
私が今実行できないことは、ストアドプロシージャを実行することです。OLEDBでストアドプロシージャを実行できません

テーブルに行を挿入する単純なストアドプロシージャです。私はSQL Plusからそれを動かすことができます。しかし、私のコードから実行するには、それは動作しません。私は80040e14エラーが発生します。

これはかなり簡単ですが、ここにはとにかく行があります。

hr = cmd.Open(session, "exec get_item_count"); 

答えて

2

EXECは、SQL * Plus構文です。 SQL * Plus(およびSQL * Plusが提供する機能の多くを実装する様々なPL/SQL GUI)以外では有効ではありません。

あなたはおそらく、あなたはOracle構文を使用している場合は、同じ構文は、両方動作します。このような何か(ODBC構文を使用して)

hr = cmd.Open(session, "{call get_item_count}"); 

またはこの(Oracle構文を使用して)

hr = cmd.Open(session, "begin get_item_count; end;"); 

をしたいですSQL * Plusを使用してアプリケーションから実行できます。 SQL * PlusはODBC構文を理解しません。ただし、他のOLE DBプロバイダはODBC構文をサポートしているため、ODBC構文はさまざまなデータベースエンジン間で移植可能です。

また、アイテム数を取得するPL/SQLオブジェクトがある場合、ストアド・プロシージャではなくストアド・ファンクションにする必要があります。プロシージャはテーブルに行を挿入していると言いますが、これはプロシージャで実行する必要があり、関数でははいけないものですが、オブジェクト名get_item_countはそれが行っていることの説明と一致しません。

+0

本当にありがとうございました。手続き名に関しては、私が言ったことをします。私は物事を取り除くときに目的を切り替えました。しかし、私はここを分かりやすくするために名前を変更するのを忘れていました。 – Paradoxyde

関連する問題