2017-06-13 52 views
1

就數據庫而言,我是一個臨時用戶。我一直負責創建程序,他們基本上將會做一個非常基本的自動保存功能。存儲過程'IF'語句+基於空字段的'UPDATE'或'INSERT'

我在之前創建了存儲過程,但沒有一個必須檢查NULL條目並使用IF語句來確定是否需要完成UPDATE或新INSERT。

DB:MySQL的 編輯:MySQL工作臺

這裏是我的方法:


CREATE DEFINER=`appuser`@`15.15.15.%` PROCEDURE `test `(
    id varchar(45), 
    q01 varchar(2), 
    a01 varchar(45), 
    … 
    q06 varchar(2), 
    a06 varchar(45) 
) 
BEGIN 
    DECLARE _nullCheck VARCHAR(25); 

    SET _ nullCheck = (SELECT statement to check for null entries)); 
    IF (_nullCheck) THEN 
     BEGIN 
      UPDATE statement 
     END; 
    ELSE 
     BEGIN 
      INSERT statement 
     END; 
END; 

在我的MySQL工作臺,它告訴我,這個 'END' 是缺少一個 'IF'


我在查看其他有關IF的線程並存儲之後構建了我的存儲過程程序,這是我想出的。

預先感謝您的任何建議或幫助。

編輯矯正:


CREATE DEFINER=`appuser`@`15.15.15.%` PROCEDURE `test `(
    id varchar(45), 
    q01 varchar(2), 
    a01 varchar(45), 
    … 
    q06 varchar(2), 
    a06 varchar(45) 
) 
BEGIN 
    DECLARE _nullCheck VARCHAR(25); 

    SET _ nullCheck = (SELECT statement to check for null entries)); 

    IF (_nullCheck) THEN 
      UPDATE statement 
    ELSE 
      INSERT statement 
    END IF; 
END 

+0

看看https://dev.mysql.com/doc/refman/5.7/en/if.html –

+0

缺少'END IF;'。 – wchiquito

+0

好吧我想出了我的存儲過程的僞代碼中的錯誤,現在我的問題是我的條件是現在沒有開火。 – devNub

回答

0

嘗試:(過程的僞代碼,不編譯)

mysql> DELIMITER // 

mysql> CREATE DEFINER=`appuser`@`15.15.15.%` PROCEDURE `test` (
    -> id varchar(45), 
    -> q01 varchar(2), 
    -> a01 varchar(45), 
    -> … 
    -> q06 varchar(2), 
    -> a06 varchar(45) 
    ->) 
    -> BEGIN 
    -> DECLARE _nullCheck VARCHAR(25); 
    -> SET _ nullCheck = (SELECT statement to check for null entries)); 
    -> IF (_nullCheck) THEN 
    ->  BEGIN 
    ->  UPDATE statement 
    ->  END; 
    -> ELSE 
    ->  BEGIN 
    ->  INSERT statement 
    ->  END; 
    -> END IF; 
    -> END// 
Query OK, 0 rows affected (0.00 sec) 

mysql> DELIMITER ; 

UPDATE

mysql> DROP PROCEDURE IF EXISTS `test`; 
Query OK, 0 rows affected, 1 warning (0.00 sec) 

mysql> DELIMITER // 

mysql> CREATE PROCEDURE `test` (
    -> id varchar(45), 
    -> q01 varchar(2), 
    -> a01 varchar(45), 
    -> q06 varchar(2), 
    -> a06 varchar(45) 
    ->) 
    -> BEGIN 
    -> DECLARE `_nullCheck` VARCHAR(25); 
    -> SET `_nullCheck` := (SELECT 'TRUE'); 
    -> IF (`_nullCheck` = 'TRUE') THEN 
    ->  SELECT 'UPDATE'; 
    -> ELSE 
    ->  SELECT 'INSERT'; 
    -> END IF; 
    -> END// 
Query OK, 0 rows affected (0.00 sec) 

mysql> DELIMITER ; 

mysql> CALL `test`(NULL, NULL, NULL, NULL, NULL); 
+--------+ 
| UPDATE | 
+--------+ 
| UPDATE | 
+--------+ 
1 row in set (0.00 sec) 

Query OK, 0 rows affected (0.00 sec) 
+0

現在我的問題是我的條件是沒有發射現在當我做一個過程調用它。 插入語句本身起作用,更新語句自行工作,但放入條件既不是射擊。 即使我把一個真實的條件(5> 4)。 ,並且當我保存了我更正的存儲過程並且沒有在通話本身出錯時,它不會給我任何錯誤。 我不知道如何解決問題,爲什麼它不像它應該發射 – devNub

+0

@devNub:查看更新的答案。 – wchiquito

+0

非常感謝你,明白了! – devNub