存储过程' IF'声明+'更新'或者' INSERT'基于空字段

时间:2017-06-13 14:26:47

标签: php mysql stored-procedures

就数据库而言,我是一个临时用户。我的任务是创建程序,他们基本上会做一个非常基本的自动保存功能。

之前我已经创建了存储过程,但没有必须检查NULL条目并使用IF语句来确定是否需要执行UPDATE或新的INSERT。

DB: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;

在我的MySQL Workbench中,它告诉我这个'结束'错过了一个' 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

1 个答案:

答案 0 :(得分: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 ;

<强>更新

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)