在ODP.NET中使用Oracle UDT时出现异常问题(用户定义类型)

在ODP.NET中使用Oracle UDT时出现异常问题(用户定义类型),oracle,odp.net,user-defined-types,Oracle,Odp.net,User Defined Types,甲骨文11g 我在使用UDT时遇到了一个奇怪的问题,我有4个模式:用户1、用户2、用户A、用户B。 用户_1和用户_2都有一个UDT,实际上是一个嵌套表: CREATE OR REPLACE TYPE TAB_NUMBERS AS TABLE OF NUMBER(10) 用户_A有一个同义词,指向用户_1中的类型: create or replace synonym TAB_NUMBERS for USER_1.TAB_NUMBERS; USER_B有一个同义词,指向USER_2中的类型:

甲骨文11g

我在使用UDT时遇到了一个奇怪的问题,我有4个模式:用户1、用户2、用户A、用户B。 用户_1和用户_2都有一个UDT,实际上是一个嵌套表:

CREATE OR REPLACE TYPE TAB_NUMBERS AS TABLE OF NUMBER(10)
用户_A有一个同义词,指向用户_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;
用户_A和用户_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\u编号;对于op.UdtTypeName=USER_2.TAB_NUMBERS,错误消失,一切正常

有人有线索吗


提前感谢。

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


在“用户”下,运行“从所有对象中选择*,其中对象名称=“选项卡编号”