オラクル11g.
UDT の使用時に奇妙な問題が発生しました。USER_1、USER_2、USER_A、USER_B の 4 つのスキーマがあります。USER_1 と USER_2 の両方に UDT (実際にはネストされたテーブル) があります。
CREATE OR REPLACE TYPE TAB_NUMBERS AS TABLE OF NUMBER(10)
USER_A には、USER_1 の型へのシノニム ポイントがあります。
create or replace synonym TAB_NUMBERS for USER_1.TAB_NUMBERS;
USER_B には、USER_2 の型へのシノニム ポイントがあります。
create or replace synonym TAB_NUMBERS for USER_2.TAB_NUMBERS;
USER_A と USER_B の両方に、シノニムを使用するプロシージャがあります。
CREATE OR REPLACE PROCEDURE proc_test (p1 in tab_numbers)
IS
BEGIN
NULL;
END;
C# コードでは次のようになります。
OracleConnection conn = new OracleConnection("data source=mh;user id=USER_A;password=...");
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "proc_test";
cmd.CommandType = CommandType.StoredProcedure;
//
OracleParameter op = new OracleParameter();
op.ParameterName = "p1";
op.Direction = ParameterDirection.Input;
op.OracleDbType = OracleDbType.Object;
op.UdtTypeName = "TAB_NUMBERS";
Nested_Tab_Mapping_To_Object nt = new Nested_Tab_Mapping_To_Object();
nt.container = new decimal[] { 1, 2 };
op.Value = nt;
......
このコードは正常に動作しますが、接続文字列を USER_A から USER_B に変更するとエラーが発生し、次のエラーが表示されます。
OCI-22303: type ""."TAB_NUMBERS" not found
興味深いことに、op.UdtTypeName = "TAB_NUMBERS"; を変更すると、op.UdtTypeName = "USER_2.TAB_NUMBERS" に変更すると、エラーはなくなり、すべて正常に動作します。
誰にも手がかりはありますか?
前もって感謝します。