1
我有一個java中的函數,它使用可調用語句並在mysql中用「call」一詞調用模式函數。它工作正常。調用mysql函數工作在jdbc,但不是在mysql上的「調用」
但是,如果在我的SQL我寫:
call myFunction(); (in this case :call getNumberOfIdeasDB();)
它不會工作,我得到:PROCEDURE ......犯規存在。
它對我來說很奇怪,它適用於java,但不適用於MySQL。你能幫我理解爲什麼。
這裏是我在Java甚至我不相信是相關的功能。
public static double getNumberOfIdeasDB() {
Connection co = riverManager.getConnection("jdbc:...");
CallableStatement ps = co.prepareCall("{?= call getNumberOfIdeasThisWeek()}"); //10
ps.registerOutParameter(1, java.sql.Types.DOUBLE);
ps.execute();
return ps.getDouble(1);
}
這是一個try/catch語句內,工作正常我只是不知道爲什麼在這裏「呼叫」這個詞的作品
你不在'CALL'中存儲函數。你可以'SELECT myFunction();'(返回一個標量)或'DO myFunction();'(void context,返回值被丟棄)。像往常一樣,JDBC是以自己看似隨機的方式完成的......注意,用'?捕獲返回值? ='同樣無意義。 –
@ Michael-sqlbot我不同意;它在JDBC中指定(從ODBC iirc複製)以獨立於數據庫的方式執行存儲過程或類似對象。 '?= ..'允許綁定單個輸出值。 –
我相信你是對的,@MarkRotteveel。我擔心這是一個有點誤導的「我累了,應該在一個小時前睡着了」的咆哮。感謝事實和水平的迴應。 –