在ODP.NET中使用Oracle UDT时的奇怪问题(用户定义类型)

时间:2012-05-30 06:43:08

标签: oracle odp.net user-defined-types

Oracle 11g。

使用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”,错误消失了,一切正常。

任何人都有线索吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

无论是否通过OracleCustomTypeMappingAttribute对象或XML配置文件提供映射,都无法使用同义词指定自定义类型映射。

https://docs.oracle.com/cd/E11882_01/win.112/e23174/featUDTs.htm#ODPNT382