2013-02-25 173 views
0

我有一個名爲tableExists的函數。它可以用來檢查表格的存在。我想在數據庫升級腳本中使用它。我可以使用這樣的功能:MySQL如果語句失敗

select myDb.tableExists('myDb', 'someTable') as cnt into @exists; 

而且看到的結果是這樣的:

mysql> select @exists; 
+---------+ 
| @exists | 
+---------+ 
|  1 | 
+---------+ 

現在,我想在if語句中使用它,其次是CREATE TABLE語句。但是,如果我有問題。以下是我想要測試的內容:

mysql> IF (@exists = 1) THEN 
    -> select 'exists' 
    -> END IF; 
ERROR 1064 (42000): 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 'IF (@exists = 1) THEN 
select 'exists' 
END IF' at line 1 

我在這裏錯過了什麼?這應該很簡單。

+0

你想要完成什麼?這似乎對我來說是個黑暗的魔法 – 2013-02-25 18:40:24

+0

MySQL流控制語句「IF/ELSE/WHILE ...」意味着在存儲過程或函數的上下文中執行,而不是交互式地執行 – 2013-02-25 18:40:29

回答

3

您只能在存儲過程中使用IF

有效的select語句應該是:

SELECT CASE (@exists) WHEN 1 THEN 'exists' END as DoesItExist 

如果您在存儲過程中使用的情況下作爲一個獨立的元素,你需要用end case結束它怎麼過。

2

你爲什麼不只是使用IF NOT EXISTSCREATE TABLE查詢和保存自己的一切麻煩:

CREATE TABLE new_table IF NOT EXISTS 
... {table definition} 

如果該表已經存在,什麼都不會發生。