3

.net 2.0 ベースの Windows アプリケーションで Oracle クエリの問題に直面しています。System.Data.OracleClientOracleデータベースへの接続に使用しています。データベースの名前は ですmyDB。私が使用している接続文字列の下:

Data Source=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)
(HOST =  172.16.0.24)(PORT = 1522)))(CONNECT_DATA =(SERVICE_NAME = ORCL)));
User ID=myDB;Password=myDB;Unicode=True

以下のクエリを実行すると、間違った結果が返されます (ここで、間違った結果は間違ったデータを意味します。データは myDB に属していません)。

SELECT ID, NAME  
FROM MyTempTable
WHERE ID IN (10780, 10760, 11890)

しかし、データベース名を追加すると、正しい結果が得られます。

SELECT ID, NAME
FROM "myDB".MyTempTable
WHERE ID IN (10780, 10760, 11890)

私の制限は、これは汎用アプリケーションであり、実行時に任意のデータベースで実行できるため、データベース名を追加できないことです。助けてください。

4

5 に答える 5

2

データベースの問題に接続すると

ALTER SESSION SET CURRENT_SCHEMA=abc;

ここで、abc はテーブルを所有するユーザーです。

于 2011-06-04T21:52:44.983 に答える
2

これは名前解決の問題のようです。テーブルにパブリック シノニムを作成してみてください。

CREATE PUBLIC SYNONYM MyTempTable for MyTempTable ;

また、間違った結果、間違ったデータ、エラー メッセージとは正確には何を意味しますか?


編集:必要なテーブルが属するスキーマの名前は何ですか? 選択しようとしているテーブルは、接続しているユーザーに属するスキーマとは異なるスキーマにあるようです。

于 2008-09-01T15:18:49.380 に答える
1

手始めに、可能であれば、Oracleの.netデータプロバイダーを使用することをお勧めします。プロジェクトを開始する場合は、今後の苦痛を軽減するための最良の方法になります。ここから入手できます

于 2008-09-01T19:09:20.480 に答える
1

stjohnroe が言ったことを拡張すると、異なる結果が得られる理由は、同じ名前の 2 つの異なるテーブルが異なるスキーマに存在するためです。
クエリの先頭に myDB ユーザー名を追加することで、期待するデータを含むテーブルにアクセスできるようになります。(データが「myDB」に属していないと言うので、これはおそらく、データを書き込んでいるアプリ/プロシージャも間違ったテーブルに書き込んでいることを意味します)。
解決策は次
のとおりです。 1. テーブルが実際に「myDB」に属していない場合は、整理のために削除します (コードを実行すると、904 table not found エラーが発生する場合があります)
2. スキーマとテーブルのシノニムを作成します本当にアクセスしたい (例: CREATE SYNONYM myTable FOR aschema.myTable;)
3. テーブルを所有するスキーマからアクセス権を付与することを忘れないでください (例: GRANT SELECT,INSERT,DELETE ON myTable TO myDB; (ここで myDB はユーザー/スキーマを指します))。

于 2008-09-02T16:43:26.033 に答える
0

追加してみる

CONNECT_DATA=(SID=myDB)(SERVICE_NAME=ORCL)

接続文字列で。

于 2008-09-01T14:58:47.510 に答える