2015-05-07 39 views
0

我有一個存儲過程,我正在處理的是,當我嘗試傳遞參數給它時,與我用硬編碼值運行時相比,返回的是無效返回值。如何將多個參數傳遞到一個mysql存儲過程

程序與硬編碼值:

BEGIN 
    SELECT COUNT(DISTINCT ItemID) 
    FROM ( 
     SELECT * 
     FROM sandbox_inventoryitempurchase 
     WHERE OrgID = '2781823' 
      AND PurchaseMonth>'2015-03-01' 
    ) as DistinctCount; 
END 

在運行時,這將返回:16,其是正確的。

過程有兩個輸入參數:

BEGIN 
    SELECT COUNT(DISTINCT ItemID) 
    FROM ( 
     SELECT * 
     FROM sandbox_inventoryitempurchase 
     WHERE OrgID = orgid 
      AND PurchaseMonth>sincedate 
    ) as DistinctCount; 
END 

的輸入參數被定義爲:

IN userid整數,IN orgid整數,IN sincedate日期

運行時,該返回:334這是不正確的。

我是新來的存儲過程,將不勝感激任何協助提供有關我做錯了什麼,我需要做什麼來解決?

謝謝...

+0

請編輯您的問題,並顯示您的程序以及如何調用它。 –

+0

嗨,對不,我只是想在Navicat中運行存儲過程。當我得到它的工作時,我正在從AwareIM開發的應用程序調用該過程,因此調用過程可能不相關? –

+0

我想看到它的原因是看到你通過orgid和sincedate。你在Navicat中提供了正確的值嗎? –

回答

0

添加 「@」 您的參數之前:

BEGIN 
    SELECT COUNT(DISTINCT ItemID) 
    FROM ( 
     SELECT * 
     FROM sandbox_inventoryitempurchase 
     WHERE OrgID = @orgid 
      AND PurchaseMonth>@sincedate 
    ) as DistinctCount; 
END 

快速turtorial將是:Write-a-Stored-Procedure-in-SQL (看看如何在這頁的末尾使用參數... )

+0

你好,謝謝,但現在我只得到0 –

0

嘗試使用與您的列名稱不同的輸入參數。 變化:

BEGIN 
    SELECT COUNT(DISTINCT ItemID) 
    FROM ( 
     SELECT * 
     FROM sandbox_inventoryitempurchase 
     WHERE OrgID = orgid 
      AND PurchaseMonth>sincedate 
    ) as DistinctCount; 
END 

要:

BEGIN 
    SELECT COUNT(DISTINCT ItemID) 
    FROM ( 
     SELECT * 
     FROM sandbox_inventoryitempurchase 
     WHERE OrgID = p_orgid 
      AND PurchaseMonth > p_sincedate 
    ) as DistinctCount; 
END 

,並傳遞p_orgid整數,IN p_sincedate日期

的解析器可以看到WHERE OrgID = orgid和計算結果爲true,每個記錄,因爲它的計算結果爲一個身份(比較自己)。

+0

嗨,不同的結果,但結果還是不一樣的硬編碼值: BEGIN SELECT COUNT(DISTINCT項目ID)FROM(SELECT * FROM sandbox_inventoryitempurchase WHERE ORGID ='2781823'AND PurchaseMonth>'2015-03-01')爲DistinctCount; END 返回:16 BEGIN SELECT COUNT(DISTINCT的ItemID)FROM(SELECT * FROM sandbox_inventoryitempurchase WHERE ORGID = p_orgid AND PurchaseMonth> p_purchasemonth)作爲DistinctCount; END 帶輸入參數: 在'p_orgid'整數,在'p_purchasemonth'日期 值:2781823,2015-03-01 返回:49個 任何想法? –

+0

你在你的約會'2015-03-01'周圍放單引號嗎? –

+0

我不是,但我現在已經解決了!我想這是把它當作計算。馬克,非常感謝你的幫助,我真的很感激! –

相關問題