2014-10-10 75 views
0

我真的不知道我在這裏做錯了什麼。MySQL DECLARE/SELECT INTO語法錯誤?

Routine Name: procInsertName 
Type: PROCEDURE 
Parameters: IN Name VARCHAR 30 Charset 

DECLARE tempNameID INT; 

SELECT nameID 
INTO tempNameID 
FROM name 
WHERE value = @Name; 

IF tempNameID IS NULL THEN 

    INSERT INTO name (value) 
    VALUES (@Name); 

END IF; 

Is deterministic: unchecked 
Definer: <blank> 
Security type: DEFINER 
SQL data access: CONTAINS SQL 
Comment: <blank> 

我走出來的一個錯誤:

One or more errors have occurred while processing your request: 

The following query has failed: "CREATE PROCEDURE `procInsertName`(IN `Name` VARCHAR(30)) NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER DECLARE tempNameID INT; 

SELECT nameID 
INTO tempNameID 
FROM name 
WHERE value = @Name; 

IF tempNameID IS NULL THEN 

    INSERT INTO name (value) 
    VALUES (@Name); 

END IF;" 

MySQL said: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE tempNameID INT; 

SELECT nameID 
INTO tempNameID 
FROM name 
WHERE valu' at line 1 

任何幫助,將不勝感激,我已經花了近30分鐘線上看四周,找不到任何東西。謝謝。

+0

您沒有將DECLARE初始化爲一個值,這可能是原因。例如,'DECLARE tempNameID INT unsigned DEFAULT 1;' – ryekayo 2014-10-10 15:36:46

+0

謝謝@ryekayo,但遺憾的是沒有做任何事情。 – XstreamINsanity 2014-10-10 15:43:16

回答

1

我認爲錯誤可能在於@符號...您必須來自SQL Server後臺; MySQL不使用變量@表示法,因此您的參數實際上只稱爲Name。嘗試將您的Name參數重命名爲p_Name,然後在存儲過程的主體中將@Name的兩個實例替換爲p_Name

I.e.像這樣:

CREATE PROCEDURE `procInsertName`(IN `p_Name` VARCHAR(30)) NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER 
DECLARE tempNameID INT; 

SELECT nameID 
INTO tempNameID 
FROM name 
WHERE value = p_Name; 

IF tempNameID IS NULL THEN 

    INSERT INTO name (value) 
    VALUES (p_Name); 

END IF; 
+0

我見過兩個例子。也許它依賴於版本。但是,我改變了我的程序,這實際上也幫助了它。謝謝。 – XstreamINsanity 2014-10-10 16:28:06

+1

我認爲'@ Name'是MySQL中的一個合法標識符(因爲我也很確定我看過它的使用,但不知道它在所有版本中是否合法),但是您必須將您的參數聲明爲在存儲過程的簽名中也有'@ Name'(即'IN @Name VARCHAR(30)')。這就是說,我知道按照慣例,'@'符號用於MySQL中的其他內容(可能是局部變量,但是我的內存使我失敗)。 – Ruslan 2014-10-10 16:29:26