0

私はこれに関して私が見つけることができたすべての同様の質問を成功せずに経験しました。

Visual Studio 2010では、Oracleストアドプロシージャを呼び出すMVCWebアプリを作成しています。非常に単純なストアドプロシージャを呼び出すことすらできませんでした。これは単純なストアドプロシージャです。

CREATE OR REPLACE PROCEDURE VANCE_TEST ( PARTNERS OUT sys_refcursor ) AS
BEGIN
  OPEN PARTNERS FOR SELECT COMPANY_NAME, SUN FROM PARTNER WHERE MARKET_IDX = 16;
END;
/

両方の列はVarchar2タイプです。SQL * Plusからプロシージャを呼び出すと、次のコードを使用して正常に機能します。

var rc refcursor
execute VANCE_TEST( :rc );
print rc;

私のweb.configファイルには、ストアドプロシージャのカーソルを定義するために、次の仕様があります。

  <oracle.dataaccess.client>
    <settings>
      <add name="PARTNER.VANCE_TEST.RefCursor.PARTNERS" value="implicitRefCursor bindinfo='mode=Output'" />
      <add name="PARTNER.VANCE_TEST.RefCursorMetaData.PARTNERS.Column.0" value="implicitRefCursor metadata='ColumnName=COMPANY_NAME;BaseSchemaName=PARTNER;BaseTableName=PARTNER;NativeDataType=Varchar2;ProviderType=Varchar2;ProviderDBType=String;DataType=System.String;ColumnSize=100;AllowDBNull=true'" />
      <add name="PARTNER.VANCE_TEST.RefCursorMetaData.PARTNERS.Column.1" value="implicitRefCursor metadata='ColumnName=SUN;BaseSchemaName=PARTNER;BaseTableName=PARTNER;NativeDataType=Varchar2;ProviderType=Varchar2;ProviderDBType=String;DataType=System.String;ColumnSize=10;AllowDBNull=true'" />
    </settings>
  </oracle.dataaccess.client>

これは、関数の追加インポートを実行したときに正常に機能し、VSは返されたデータの複合型VANCE_TEST_Resultを作成できました。PARTNERはスキーマ名であり、Add Function Importは、VANCE_TESTの前に追加するまで、返された列を確認できませんでした。

Models.Entitiesを使用してPARTNERテーブルに対してLinqクエリを実行するのに問題がない私のプログラムでは、次のコードがあります。

using (Models.Entities db = new Models.Entities())
{
    IEnumerable<Models.VANCE_TEST_Result> results = db.VANCE_TEST();

実行すると、db.VANCE_TEST()内で例外が発生します。

public ObjectResult<VANCE_TEST_Result> VANCE_TEST()
{
    return base.ExecuteFunction<VANCE_TEST_Result>("VANCE_TEST");
}

ExecuteFunction(トレースできません)は、Oracleからの複数行エラーがあるOracle.DataAccess.Client.OracleExceptionをスローします。

ORA-06550: line 1, column 17: 
PLS-00302: component 'VANCE_TEST' must be declared 
ORA-06550: line 1, column 7: 
PL/SQL: Statement ignored

ここで何が起こっているかについてのヒントはありますか?または、送信されている実際のSQLコードを取得するにはどうすればよいですか?私はこの他のStackoverflowの記事から学び、問題が解決されたら、可能な限りそれと同じように私のことをしようとしました:

PLS-00103で例外ORA-06550を返すOracleストアドプロシージャ呼び出し

あなたがこれに当てることができるどんな光にも前もって感謝します。

4

1 に答える 1

0

ユーザー PARTNER としてデータベースに接続していますか? そうでない場合、おそらくこれが役立つでしょうか?

return base.ExecuteFunction<VANCE_TEST_Result>("PARTNER.VANCE_TEST");
于 2013-01-10T00:56:05.043 に答える