如何在mysql工作台中调用程序

时间:2015-06-29 04:57:55

标签: java mysql database

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) 

但我收到错误,请告诉我错误的地方。

2 个答案:

答案 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.