2015-06-29 9 views
0
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不存在。我正嘗試使用以下聲明致電:如何在mysql工作臺中調用過程

SET @increment = '1'; 

select temp(@increment) 

但我得到錯誤,請告訴我我犯的錯誤。

回答

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的文檔頁面標題,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

您的存儲過程在語法上是錯誤的,正如在註釋中提到的那樣,您沒有使用存儲過程功能來實現它的預期用途。它的打算被用於數據操作而不是查詢。你應該考慮把你的程序變成一系列準備好的陳述。

如果您有任何問題,請讓我知道!

+0

的電話,但我想這個執行中SqlWorkBEnch關鍵字call然後程序的名字並不在Java代碼如調用temp(1);但我在路由時出現錯誤,我有那個tempstoreprocdure –

+0

更新了答案,你仍然需要在你的存儲過程中定義的OUT參數。請讓我知道,如果你有任何問題! :O) –

+0

SET @increment ='1'; 調用temp(@increment)像這樣嘗試但仍然是相同的問題得到 –

0

這就是你怎麼稱呼它,使用使用

call procedureName(params); 

製作的可串

String sqlString = "procedureName("+?+")"; //in case of Integers 


String sqlString = "procedureName('"+?+"')";//in case of Integers 
bring the parameter in prepared statement.