【问题标题】:mysql store procedure not inserting if all the columns are not inserted for a particular Table如果没有为特定表插入所有列,则 mysql 存储过程不会插入
【发布时间】:2018-04-13 08:11:52
【问题描述】:

这是一个示例,因为我不想显示我的真实表格。我在 mysql (phpmyadmin) 中有一个表格 test 的 4 列。

   CREATE TABLE `test` (
    `c1` int(11) NOT NULL,
   `c2` date DEFAULT NULL,
   `c3` varchar(35) DEFAULT NULL,
    `c4` int(11) DEFAULT NULL
    ) ;

和一个只插入三列的存储过程不起作用。

DELIMITER $$
 CREATE DEFINER=`root`@`localhost` PROCEDURE `testing`(IN `_c1` INT, IN `_c2` DATE, IN `_c3` VARCHAR(35))
NO SQL
BEGIN
   INSERT INTO `test`(`c1`,`c2`,`c3`) values(_c1,_c2,_c3);
END$$
DELIMITER ;

在创建或执行 SP 时没有错误。如果我更改存储过程以插入所有四列 c1c2c3c4,它工作正常,所有参数都根据我指定的数据类型正确给出。请注意,我已将默认值指定为NULL,用于每次都不需要插入的列。

【问题讨论】:

  • 有什么问题?
  • 也许应该删除NO SQL。无论如何demo
  • 您在此处发布的代码在更新后的 phpMyAdmin 对我来说可以正常工作。您使用的是哪个 phpMyAdmin 版本?
  • 抱歉回复晚了。版本是4.6.4

标签: mysql stored-procedures phpmyadmin


【解决方案1】:

您的代码在 mysql 中工作,从命令行尝试看看这是否是 phpmyadmin 问题。

CREATE TABLE `t` (
    `c1` int(11) NOT NULL,
   `c2` date DEFAULT NULL,
   `c3` varchar(35) DEFAULT NULL,
    `c4` int(11) DEFAULT NULL
    ) ;
DELIMITER $$
 CREATE DEFINER=`root`@`localhost` PROCEDURE `testing`(IN `_c1` INT, IN `_c2` DATE, IN `_c3` VARCHAR(35))
NO SQL
BEGIN
   INSERT INTO `t`(`c1`,`c2`,`c3`) values(_c1,_c2,_c3);
END$$
DELIMITER ;

call testing(10,'2017-11-01','aaa');
select * from t;

+----+------------+------+------+
| c1 | c2         | c3   | c4   |
+----+------------+------+------+
| 10 | 2017-11-01 | aaa  | NULL |
+----+------------+------+------+
1 row in set (0.00 sec)

【讨论】:

  • 是的,它是从命令行工作的,所以也许,它是 phpmyadmin 中的另一个错误。谢谢@P Salmon。
猜你喜欢
  • 2011-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多