2015-09-14 76 views
1

我想在Oracle中使用JOOQ調用存儲過程。存儲過程的某些輸入和輸出參數是自定義類型。jooq oracle存儲過程與ARRAY,無效列類型:1111

其中之一的定義是:

CREATE OR REPLACE TYPE "TAB_VARCHAR2_500" is table of varchar2(500); 

我以這種方式創造oracle.sql.ARRAY類型:

ArrayDescriptor ard=ArrayDescriptor("TAB_VARCHAR2_500",connection); 

//this is my object of the stores procedure, generated by jooq 

aimws.setPDataDesc(new oracle.sql.ARRAY(ard,connection,lineData.toArray())); 

aimws.execute(jooq.configuration()); 

但是,當我執行,我得到這個(甚至如果我將值設置爲空):

SQL state [99999]; error code [17004]; Invalid column type: 1111; nested exception is java.sql.SQLException: Invalid column type: 1111 

在由JOOQ爲該存儲過程生成的java類中,類型爲

public static final Parameter<Object> P_DATA_DESC = createParameter("P_DATA_DESC", org.jooq.impl.DefaultDataType.getDefaultDataType("TABLE"), false); 

我使用Spring應用程序部署在JBoss的

什麼,我做錯了一個EAR項目?我有什麼樣的對象在java中創建?

+0

應該爲'TAB_VARCHAR2_500'生成一個類。您不需要摔跤ojdbc API,比如'ArrayDescriptor'和'ARRAY'。你是否可能(意外地)從源代碼生成中排除該類?這可以通過''發生,或者如果表類型與表中的模式不同,並且您沒有包含兩個模式。 –

+0

嗨盧卡斯,感謝您的及時答覆。我正在使用來生成我將要使用的內容。現在我有一個關於該UDT定義的記錄類。 –

+0

嗨盧卡斯,感謝您的及時答覆。我使用來生成僅用於我要使用的類。現在我爲整個模式生成Java類,並且爲該特定類型看到一個「記錄」類,但不是「表」類。不知道我必須發送什麼java對象。我有一個ArrayList 中的數據。 –

回答

0

在代碼生成過程中,您可能未包含TAB_VARCHAR2_500類型,這就是爲什麼它在生成器輸出中缺失。一旦讓生成器生成這種類型,就可以將它用作數組的包裝器。通常:

aimws.setPDataDesc(new TabVarchar2_500Record(lineData)); 
aimws.execute(jooq.configuration()); 
+0

我用這種方式,但仍然是相同的錯誤「無效列類型:1111」。我將跟蹤級別設置爲調試,我可以在調用例程時看到綁定值,現在應該是()。如何獲得更多關於我可能會做錯什麼的信息? –

+0

解決!這是你第一次指出的。我混合配置文件。如何僅使用標籤來包含UDT。 –

+0

你必須包含'TAB_VARCHAR2_500' –