php - 存储过程 'IF' 语句 + 'UPDATE' 或 'INSERT' 基于空字段

标签 php mysql stored-procedures

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

我以前创建过存储过程,但都没有限制必须检查 NULL 条目并使用 IF 语句来确定是否需要完成更新或新的插入。

数据库: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 中,它告诉我这个“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

最佳答案

尝试:(程序的伪代码,不编译)

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)

关于php - 存储过程 'IF' 语句 + 'UPDATE' 或 'INSERT' 基于空字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44524353/

相关文章:

php - mumamo-alt-php-tags-mode 默认

mysql - 仅当值不存在时返回行

java - 在 Multi-Tenancy 中调用 postgres 存储过程

php - 如何让我在 Heroku 上的 Laravel 项目使用 Heroku Postgres?

php - 找不到 setIsInProcess() 函数定义

mysql - MySQL 两个数字之间序列的总和

sql-server - 如何列出两个日期之间的所有日期

mysql - 如何通过过程在三个不同的表中一次插入多行

php - 如何在我的 PHP 代码上创建一个 href class=active

mysql - 在 vb.net 中连接登录表单(adodb.connection 用法)