DELIMITER //
CREATE PROCEDURE temp ( empId INT)
BEGIN
DECLARE var_etype VARCHAR(36);
SELECT
emptype = QOUTE(emptype)
FROM
dms_document
WHERE
id = empid;
SELECT
emptype,
CASE
WHEN emptype = 'P' THEN doctype
ELSE 'No Documents required'
END
FROM
dms_report
WHERE
pilot = 1;
End//
DELIMITER ;
我已成功创建此过程但当我尝试调用它时,我收到错误1305函数database.temp不存在。我试着用这句话来打电话:
SET @increment = '1';
select temp( @increment)
但我收到错误,请告诉我错误的地方。
答案 0 :(得分:0)
关于Using JDBC CallableStatements
to Execute Stored Procedures的MySQL文档很好地解释了必要的步骤。
这是您的Java代码需要的样子:
CallableStatement cStmt = conn.prepareCall("{call temp(?)}");
cStmt.setInt(1, 42); //set your input parameter, empId, to 42.
如果您想在Java代码中使用存储过程查询返回的行,您还需要创建一个OUT
参数,如MySql&#39中所述。 ;文档页面标题为CALL
Syntax:
CALL can pass back values to its caller using parameters that are
declared as OUT or INOUT parameters
要从MySQL工作台调用存储过程,请使用CALL
命令。您可以通过直接设置每个参数的值来调用存储过程:
SET @increment = 1;
CALL temp(@increment)
然后,您只需使用SELECT
语句返回输出参数的值
SELECT @outParameter
如需帮助设置输出参数,请阅读文章MySQL Stored Procedure - SELECT - Example。
您的存储过程在语法上是错误的,并且如评论中所述,您没有将存储过程功能用于其预期用途。它的意图用于数据操作而不是用于查询。您应该考虑将您的程序转换为一系列准备好的陈述。
如果您有任何疑问,请与我们联系!
答案 1 :(得分:0)
这就是你如何称呼它,使用关键字call
然后使用程序名称
call procedureName(params);
调用字符串
String sqlString = "procedureName("+?+")"; //in case of Integers
String sqlString = "procedureName('"+?+"')";//in case of Integers
bring the parameter in prepared statement.