2011-11-08 14 views
1

我在java字符串中有一個查詢。我需要做的是通過jdbc激發查詢。 查詢:無效狀態下的函數:使用Jdbc的Oracle

String strQuery= " CREATE OR REPLACE FUNCTION GET_CLOSE_DATE (PARAM_DOCUMENT_ID IN NUMBER) 
    RETURN DATE AS 
     V_CLOSE_DATE DATE; 
    BEGIN 
     SELECT MAX(TOP_LEVEL_ELEMENT.CLOSE_DATE_TIME) INTO V_CLOSE_DATE 
     FROM TOP_LEVEL_ELEMENT WHERE TOP_LEVEL_ELEMENT.DOCUMENT_ID = PARAM_DOCUMENT_ID; 
     RETURN V_CLOSE_DATE; 
    END GET_CLOSE_DATE;"; 

我使用JDBC

Statement stmt = con.createStatement(); 
stmt.executeUpdate(strQuery); 

查詢得到成功執行,但是當我嘗試使用此功能,它拋出一個異常話說GET_CLOSE_DATE功能處於無效狀態。我也曾嘗試燒製創建函數查詢後立即開火

alter function GET_CLOSE_DATE compile; 

。兩者都成功執行,但功能仍然處於無效狀態。請提出一些解決方案。

回答

0

試試這個命令來查看一下,如果有錯誤與此功能相關聯:

SELECT * 
    FROM user_errors 
WHERE name = 'GET_CLOSE_DATE'; 

編輯:

這可能是嵌入的CR/LF在您的字符串。嘗試串聯您的SQL字符串,如:

String strQuery= " CREATE OR REPLACE FUNCTION GET_CLOSE_DATE (PARAM_DOCUMENT_ID IN" + 
       " NUMBER) RETURN DATE AS " + 
       " V_CLOSE_DATE DATE " + 
... 
+0

這是給錯誤消息:PLS-00103:出現符號「」在需要下列之一時: 開始功能包編譯程序亞型類型使用 <一個標識符>表格 當前光標的外部語言 – Akshay

+0

您是否對此有任何線索? – Akshay

+0

它報告了什麼行號? – DCookie