oracle集合作为函数返回类型

时间:2011-05-14 05:23:16

标签: java oracle collections ibatis

我们有一个数据库函数来缓存序列值。它接受序列对象名称和提取大小,递增序列并返回值。 返回类型是oracle集合。

以下是函数使用的db类型的定义:

create or replace type icn_num_type as object(v_inc_num number);
create or replace type icn_num_type_table as table of icn_num_type; --this is returned

函数返回的值缓存在应用程序端。我们正在使用ibatis进行DAO。当函数,类型和序列对象都在同一模式中时,所有这些都很有效。

现在我们在一个父模式中定义了函数,类型和序列。用户模式具有所有上述对象的同义词。我现在面临以下错误:

--- The error occurred while executing query procedure.  
--- Check the {? = call seq_inc(?, ?)}.  
--- Check the output parameters (register output parameters failed).  
--- Cause: java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist
ORA-06512: at "SYS.DBMS_PICKLER", line 18
ORA-06512: at "SYS.DBMS_PICKLER", line 58
ORA-06512: at line 1

然而,当我们从SQLDeveloper(用户架构)访问该函数时,它工作正常。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

似乎在9iR2 for java中有同义词和对象类型存在问题(限制/错误)。谷歌的ORA-21700和DBMS_PICKLER

我怀疑你在使用iBatis的JDBC驱动程序时遇到了一些问题,该驱动程序是针对用于SQL Developer的JDBC版本解决的。

抓住类似SQuirrel SQL Client的东西,尝试使用iBatis的JDBC驱动程序来查看是否可以重现。