Oracle 11g。在ODP.NET中使用Oracle UDT時的奇怪問題(用戶定義類型)
我在使用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;
和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」,錯誤消失了,一切正常。
任何人有任何線索?
在此先感謝。
USER_B運行下SELECT * FROM ALL_OBJECTS其中OBJECT_NAME = 'TAB_NUMBERS' – vav