我们有一个数据库函数来缓存序列值。它接受序列对象名称和提取大小,递增序列并返回值。 返回类型是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(用户架构)访问该函数时,它工作正常。
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
似乎在9iR2 for java中有同义词和对象类型存在问题(限制/错误)。谷歌的ORA-21700和DBMS_PICKLER
我怀疑你在使用iBatis的JDBC驱动程序时遇到了一些问题,该驱动程序是针对用于SQL Developer的JDBC版本解决的。
抓住类似SQuirrel SQL Client的东西,尝试使用iBatis的JDBC驱动程序来查看是否可以重现。