2017-06-13 10 views
1

DBに関する限り、私はカジュアルなユーザーです。私は基本的に非常に初歩的な自動保存機能を実行する予定の手順を作成するように任されてきました。ストアドプロシージャ 'IF'文+ヌルフィールドに基づく 'UPDATE'または 'INSERT'

NULLエントリをチェックし、IF文を使用してUPDATEを実行する必要があるかどうか、または新しいINSERTを判断する必要がないという制約がありますが、以前はストアドプロシージャを作成しました。

DB:MySQLの エディタ:MYSQLワークベンチ

ここに私の手順です:

私のMySQL Workbenchで
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; 

、そのは、この 'END' が 'IF'

が欠落していることを私に告げます

IFに関する他のスレッドを見てストアードプロシージャを構築して保存しましたこれは私が思いついたものです。

ご協力いただきありがとうございます。

EDIT補正:


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

ok私はストアドプロシージャの疑似コードで私のエラーを理解しましたが、今は私の問題は私の条件がすべて今起きていないことです。 – 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

に編集するようになりました。私の問題は、私がプロシージャコールをするときに、私の条件付きではありません。 insertステートメントは単独で動作し、updateステートメントは単独で動作しますが、条件付きではなくどちらも起動しません。 真の条件を入れても(5> 4)。 と私は私の修正ストアの手順を保存し、その呼び出し自体に誤りがないとき私に何のエラーも与えていません。 私はトラブルシューティングの方法がわからないのですが、そのような発砲がなぜ起こらないのでしょうか。 – devNub

+0

@devNub:更新された回答をご覧ください。 – wchiquito

+0

ありがとうございました! – devNub

関連する問題