2011-12-09 35 views
0

問題相對簡單。在MySQL中級聯存儲過程

是否可以在MySQL中調用一個過程,轉換爲另一個?

例子:

有創造了兩個程序:PROC1和PROC2

內PROC1,我叫PROC 2. 這樣:

BEGIN 

IF (CALL ConsultConsoleAvailableTime(`StartTime`, `PlusTime`) IS NULL) THEN 
    SELECT 'error'; 
END IF; 

END; 

這可能嗎?怎麼樣?沒有在這裏工作不。 :d

EDIT1:

1318 - 用於PROCEDURE sistemajogosxbox.ConsultConsoleAvailableTime參數不正確的號碼;預計3,有2

EDIT2:

1172 - 結果由多行

而現在呢?

+0

對於'Edit1'看來你的程序'ConsultConsoleAvailableTime'需要三個參數,你只提供二:'StartTime'和'PlusTime' – Nonym

+0

他們已經滿足了。我不知道爲什麼這個消息。 – Richard

+0

我在這裏犯了一個小錯誤。我在修理。 我相信你是對的,你的迴應。 – Richard

回答

-1

您可以調用另一個存儲過程。我以前做過。

我認爲你的例子是狡猾的,因爲proc2()沒有返回值,就像一個函數一樣。也許你需要使proc2()成爲一個函數而不是一個過程。

2

只是爲了說明使用中的另一個存儲的過程的一種方法:

DELIMITER // 
CREATE PROCEDURE setOutputParameter (
    OUT OutputParameter VARCHAR(20) 
) 
BEGIN 

    SELECT 'output' INTO OutputParameter; 

END// 
DELIMITER ; 

DELIMITER // 
CREATE PROCEDURE useOutputParameter() 
BEGIN 
    CALL setOutputParameter(@tmpOutputParameter); 

    IF @tmpOutputParameter = 'output' 
     THEN SELECT 'string: output was returned' AS res; 
    END IF; 

END// 
DELIMITER ; 

步驟setOutputParameter設置一個值到它的out參數,然後該值在步驟setOutputParameter創建的佔位符(並進入可變:@tmpOutputParameter,然後在IF..THEN..聲明檢查

同樣,這可能不是最簡單的例子,甚至可能是矯枉過正的過程(使用功能的一種可能的替代),還有其他的方式返回t值o在存儲過程中使用,旨在利用存儲過程中的一個存儲過程的輸出。

[編輯]基於文的評論:

INOUTOUT參數存儲過程中(僅在存儲過程中可用的,而不是功能)允許經由CALL storedprocedurename..命令所存儲的過程的調用者傳遞一個用戶定義變量爲out參數的被調用過程的位置 - 在該過程中,同一過程運行並將值傳遞給它。被調用過程執行後,傳遞到用戶定義變量的值out變爲可用。在上面的示例中,存儲過程setOutputParameter中的out參數OutputParameter將需要一個變量在被調用時傳遞給它,因爲存儲過程setOutputParameter將傳遞一個值給它。因此,實際上,一旦存儲過程useOutputParameter中的代碼通過CALL setOutputParameter(@tmpOutputParameter);調用,則其傳遞的變量將用作輸出參數:@tmpOutputParameter現在將包含字符串值output,其中過程useOutputParameter中的其餘代碼可以使用...

在這裏閱讀更多:http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html

+0

什麼是輸出參數? – Richard

+0

MySQL存儲過程中的輸出參數是一個參數,您可以在存儲過程中將值傳遞給該參數,然後在運行相同的存儲過程後可以訪問該參數。在上面的情況..等待,讓我修改我的帖子.. – Nonym

+0

@理查德,我更新了我的帖子..我希望它以某種方式幫助 – Nonym