2012-05-30 58 views
3

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」,錯誤消失了,一切正常。

任何人有任何線索?

在此先感謝。

+0

USER_B運行下SELECT * FROM ALL_OBJECTS其中OBJECT_NAME = 'TAB_NUMBERS' – vav

回答

相關問題