2011-11-08 16 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