2012-10-24 48 views
6

我正在做一些POC。我在MySQL中編寫了一個存儲過程。我使用的數據庫操作MySQLWorkbench如創建新表,存儲過程,查詢執行等。我觀察,即使代碼看起來語法和邏輯上是正確一些意想不到的執行行爲。沒有得到預期的輸出,同時使用臨時表或光標在MySQL

這裏是點。

方法1 -

在第一種方法中,我創建臨時表中,使用INSERT INTO ...與所選列SELECT語句添加記錄 。

CREATE TEMPORARY TABLE XYZ(....); 

INSERT INTO XYZ (....) SELECT (....) FROM ABC WHERE clause; 

這樣做後,我只有在夫婦和所有其他臨時表列臨時表的列被填入正確的值得到空值。

如果我運行相同的SELECT語句(對於相同的where子句)在單獨的SQL選項卡上,我可以看到正確的輸出即使對那些情侶在得到臨時表的空值列。

如果我改變上述INSERT語句INTO..SELECT與*(所有列),然後我得到的臨時表中正確的輸出..

INSERT INTO XYZ SELECT * FROM ABC WHERE clause; 

,但不希望所有列。我也試着用ENGINE = value創建臨時表。但沒有奏效。即使我嘗試了所有這種方法與常規表(沒有TEMPORARY),但不幸的是

方法2 -

在第二種方法中,我修改同一個存儲過程與光標 代替臨時表。但即使在這種情況下,遊標也沒有得到任何記錄。

DECLARE cur1 CURSOR FOR SELECT (....) FROM ABC WHERE clause; 

如果我在單獨的SQL選項卡中運行相同的select語句(for same where子句),我可以看到正確的輸出。

我做錯了什麼?我可以得到關於此的任何建議嗎?

在此先感謝。

+2

你可以告訴你的SELECT語句選擇列,以及源和臨時表的表結構?很難看到沒有它的情況。 – SchmitzIT

+0

感謝施密茨回來。我很遲纔回復。事實上,我已經在方法一中發現了這個問題。根本原因是用作IN參數之一的變量名稱。我曾使用與我的表列名稱相同的IN變量名稱。這就是爲什麼我相信,它不知何故寫完實際的表值。我改變了IN變量名,我的存儲過程正常運行。 感謝您的幫助。 –

+1

請將其作爲回答發佈並接受,以便您的問題不會顯示爲待處理狀態。 – RandomSeed

回答

1

我在方法一想通了這個問題。根本原因是用作IN參數之一的變量名稱。我曾使用與我的表列名稱相同的IN變量名稱。這就是爲什麼我相信,它不知何故寫完實際的表值。我改變了IN變量名,我的存儲過程正常運行。