2014-10-11 161 views
0

我有一個MSSQL背景。如何使用MySQL Workbench創建函數?

我試圖通過右鍵點擊'Functions' > 'Create Function'在MySQL Workbench中創建一個函數。

我插入這個文本來創建函數到窗口中,但是它說在最後一行missing 'if'(在下面的SQL)中有sql錯誤。我錯過了什麼?

第二Qn。 (相關)

如果我使用函數SQL創建函數(不使用MySQL Workbench中的菜單),該函數會被創建,但它不會出現在正在處理的模式中顯示的「函數」中。 在MySQL Workbench中創建函數的建議方式是什麼?

謝謝。

CREATE FUNCTION fnIsExcluded(ConcattedString NVARCHAR(15), InValue DECIMAL) 
RETURNS BIT 

BEGIN 
    DECLARE individual VARCHAR(20) DEFAULT NULL; 
    DECLARE ReturnValue BIT; 

    IF (LENGTH(ConcattedString)) < 1 
     THEN 
      SET ReturnValue = 0; 


    ELSE IF ConcattedString IS NULL 
    THEN 
     SET ReturnValue = 0; 


    ELSE IF InValue IS NULL 
    THEN 

     SET ReturnValue = 0; 

    ELSE 
    SET ReturnValue = 1; 

    END IF; 

    RETURN ReturnValue; 

END; 
+0

如果您將它縮短爲'if(len)<1,則返回0,否則返回1 end if;'在編輯器中?你的語法對我來說確實很好(雖然檢查'nvarchar'類型)。 – ethrbunny 2014-10-13 11:30:04

回答

0

您沒有說明您正在使用的是哪個版本的MySQL Workbench。

1)例程編輯器中的語法錯誤是因爲在舊版本中編輯器沒有自動處理分隔符。因此,你需要一個命令來改變默認的分隔符,如:

delimiter $$ 

(在文本的頂部)更改默認(分號)一個自定義(雙美元)。你必須這樣做的原因是,在函數定義中需要默認的分隔符,如果沒有更改,客戶端(這裏是MySQL Workbench)會錯誤地將你的函數命令分割成單獨的命令。但是,您可以更新到最新的MySQL Workbench版本(本文撰寫時爲6.2.3),以自動處理該版本。

2)db結構中的變化通常不能自動拾取,因爲這意味着要頻繁地加載所有db內容,這對於任何非平凡的db來說都是不可行的。因此,您必須通過單擊刷新按鈕來手動觸發。

enter image description here

然而,一些改變(特別是增加或你做你自己在MySQL Workbench中刪除)或者已經被跟蹤或將出現在未來的版本)。

+0

感謝Mike,我在MacOSX上使用6.2.3。我已經按照您的建議嘗試過手動刷新模式,但沒有好處。 請注意,當我點擊模式並點擊旁邊的信息圖標(i)時,我可以看到我在「功能」,「存儲過程」選項卡下創建的函數和例程。 PS。我已經解決了語法錯誤。 – snifferdog 2014-10-14 21:27:50