2011-05-14 56 views
2

我們有一個數據庫函數來緩存序列值。它接受序列對象名稱和獲取大小,遞增序列並返回值。 返回類型是一個oracle集合。oracle集合作爲函數返回類型

這裏是由函數所使用的分貝類型定義:

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

嘗試在調用「{?= call seq_inc(?,?)}」的前提下爲模式名稱添加前綴。 – 2011-05-14 17:05:48

+0

感謝您的回覆Michael。函數調用的前綴模式。 ? =調用USER_SCHEMA.seq_inc(?,?)相同的問題仍然存在。 – Krish 2011-05-15 16:52:26

+0

你是否在類型名稱的前綴? – Samuel 2011-05-15 18:12:33

回答

0

似乎在9iR2 for java中存在同義詞和對象類型的問題(限制/錯誤)。谷歌的ORA-21700和DBMS_PICKLER

我懷疑你的JDBC驅動程序正在用於iBatis的一些問題,解決了用於SQL Developer的JDBC版本。

抓住SQuirrel SQL Client之類的東西,嘗試用於iBatis的JDBC驅動程序,以查看是否可以重現。