Оракул 11г.
Я столкнулся со странной проблемой при использовании UDT, у меня есть эти 4 схемы: USER_1, USER_2, USER_A, USER_B. И 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;
И в коде С#:
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", ошибка ушла, все работает нормально.
У кого-нибудь есть подсказки?
Заранее спасибо.