3

データベースリンクを介してOracleストアドプロシージャを実行する方法を参照すると、私の場合は機能しません。何が欠けているのかわからない。

同じコンピューターに SQL Server インスタンスと Oracle データベースがあります。と呼ばれるデータベース リンクが Oracle に作成されますss

そして、SQL Serverにはストアドプロシージャがありますdbo.test_proc

create proc dbo.test_proc
as
    print 'testing';

どうやら、パラメータも戻り値もありません。

データベース リンク経由で Oracle のストアド プロシージャを呼び出そうとしました。しかし、次のどれも機能しません。

exec test_proc@ss;
exec "test_proc"@ss;
exec "dbo"."test_proc"@ss;
exec "dbo.test_proc"@ss;
exec "dbo..test_proc"@ss;

エラーは次のようになります

PLS-00201: identifier 'test_proc@SS' must be declared
ORA-06550: line 1, column 7:

それを手伝ってくれる人はいますか?私は長い間試してきました。ありがとう!


sys.proceduresクエリを実行して SQL Server 内のストアド プロシージャの存在を確認し、データベース リンクを介してストアド プロシージャを実行しようとするために、 画像がアップロードされます。画像

4

3 に答える 3

3

実際には、dg4odbc を介してストアド プロシージャまたは関数を呼び出すことができます。データベース ゲートウェイ for MS SQL Serverをテストしましたが、とにかく SQL Server テーブル/スカラー値関数をネイティブにサポートできませんでした。この機能については、どちらもDBMS_HS_PASSTHROUGH.EXECUTE_IMMEDIATEに依存する必要があります。挿入された行の ID を取得する必要がありました。

DECLARE
  RESULT NUMBER(8,2);
  val  INTEGER;
  c    INTEGER;
  nr   INTEGER;
BEGIN

  RESULT := DBMS_HS_PASSTHROUGH.EXECUTE_IMMEDIATE@mssqldb('select SCOPE_IDENTITY();');
  c := DBMS_HS_PASSTHROUGH.OPEN_CURSOR@mssqldb; 
  DBMS_HS_PASSTHROUGH.PARSE@mssqldb(c, 'select @@IDENTITY');
  LOOP
    nr := DBMS_HS_PASSTHROUGH.FETCH_ROW@mssqldb(c);
    EXIT WHEN nr = 0;
    DBMS_HS_PASSTHROUGH.GET_VALUE@mssqldb(c, 1, val);
  END LOOP;  
  DBMS_HS_PASSTHROUGH.CLOSE_CURSOR@mssqldb(c); 
  DBMS_OUTPUT.PUT_LINE('retrieved: ' || val);
END;
于 2013-01-29T14:04:25.673 に答える
2

しばらくグーグルした後、 SQLServerでのストアドプロシージャの呼び出しをサポートしていないdg4odbcを使用していることがようやくわかりました。

http://forums.oracle.com/forums/thread.jspa?threadID=1131396&tstart=0

しかし、私のコンピューターはWindows 7なので、まだ解決策を探しています。ありがとう!


更新:jonearlesは私にトリッキーなアイデアを与えますが、それは機能します。以下のコメントを参照してください。

于 2011-04-04T23:50:31.570 に答える