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。我担心这是一个有点误导的“我累了,应该在一个小时前睡着了”的咆哮。感谢事实和水平的回应。 –