2011-08-31 23 views
3

Oracleストアドプロシージャに情報を送信する必要があるSQL Serverストアドプロシージャがあります。SQLストアドプロシージャからOracleストアドプロシージャを実行

どうすれば設定できますか?それはリンクサーバーですか?そして、ストアドプロシージャを渡して実行するコードをどのように記述すればよいですか?

+1

あなたは** SQL **(クエリ言語構造化)と言うが、あなたは本当に** SQL Serverの**(マイクロソフトのリレーショナル・データベース・システム)を意味する - 右の?? OracleはSQLも使用しています。また、IBM DB2、Informix、Firebird、MySQLも同様です。 –

+0

右のSQL Server(私はあなたがそれを編集したと仮定しています): – Miles

+0

私はあなたの投稿をそれに応じて更新しました。 –

答えて

1

私はMicrosoftのCLRを使用して、サーバ間で押された変数を処理するために私自身の小さなC#アプリケーションを書くためになってしまったが判明します。ここに私がやったことだ:

  1. C#アプリケーションがWindowsでスケジュールされたタスクで起動する
  2. アプリケーションは、SQL Serverのストアドプロシージャを実行し、戻りは
  3. アプリケーションは、その後、適切な値
  4. を使用してOracleのストアドプロシージャを実行値を取得します
2

これは、私はおそらく最初からしようと構文は次のとおりです。

SELECT * FROM OPENQUERY(<linked server name>, '{CALL <oracle sp>}') 

私が見てきたどのような(私はこれを自分で試していません)あなたはまた、どのOracle関数を呼び出すためにOPENQUERYを使用することができるということですストアドプロシージャを呼び出すか、ストアドプロシージャを関数に変換することができます。 SQL Serverからの接続は次のようになります:

SELECT * FROM OPENQUERY(<linked server name>, 'SELECT <oracle function> FROM dual') 
+0

それで、私はそこに別のレンチを投げることにしましょう。私は、私から入力パラメータを受け取り、キャプチャする必要のある出力パラメータを持っているOracle上でsprocを実行します...私はどのような構文を使用しますか? – Miles

+0

私の答えは出力パラメータを取得する構文を使用します。 – hagensoft

1

ます。また、使用することができます

DECLARE @outputParameter int 
EXEC ('BEGIN <procedureName>(?,?); END;', @inputParameter , @outputParameter OUTPUT) at <linkedServerName> 

これはキャップを許可出力パラメータのチューニング

2

Oracleサーバーの「TestingProcedure」プロシージャ。

SQL Serverのリンクサーバー "LinkedServer"。 SQLサーバーの例では

コールTestingProcedure:

EXECUTE ('begin TestingProcedure; end;') AT LinkedServer;