甲骨文 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",错误消失了,一切正常。
有人有任何线索吗?
提前致谢。