4

MySQLルーチン:

DELIMITER $$

CREATE DEFINER=`root`@`%` PROCEDURE `INSERT_Employee_Info`(
IN lname varchar(64),
IN fname varchar(64),
IN mname varchar(64)
)
BEGIN
INSERT INTO tbl_employee_info(lname, fname, mname)
VALUES(lname, fname, mname);
END

NULL場合によっては、値lname、fname、およびmnameにnull以外の何も含まれていないことがあります。値の代わりに、insertステートメントを挿入する必要があり''ます。

私は次のことを念頭に置いていましたが、それが機能するかどうかは非常に疑わしいです。

INSERT INTO tbl_employee_info(lname, fname, mname)
VALUES(CASE lname WHEN '' THEN NULL ELSE lname END,
CASE fname WHEN '' THEN NULL ELSE fname END,
CASE mname WHEN '' THEN NULL ELSE mname END);
4

2 に答える 2

15

動作しますが、括弧を付ける必要がありますcase

INSERT INTO tbl_employee_info(lname, fname, mname)
VALUES
(
   (CASE lname WHEN '' THEN NULL ELSE lname END),
   (CASE fname WHEN '' THEN NULL ELSE fname END),
   (CASE mname WHEN '' THEN NULL ELSE mname END)
);
于 2012-11-12T07:53:52.607 に答える
4

IF()関数を使用できます-

CREATE DEFINER=`root`@`%` PROCEDURE `INSERT_Employee_Info`(
  IN p_lname varchar(64),
  IN p_fname varchar(64),
  IN p_mname varchar(64)
)
BEGIN    
  INSERT INTO tbl_employee_info(lname, fname, mname)
  VALUES(
    IF(p_lname = '', NULL, p_lname),
    IF(p_fname = '', NULL, p_fname),
    IF(p_mname = '', NULL, p_mname));
END

もう1つの提案-フィールド名とパラメーターに同じ名前を使用しないでください。

于 2012-11-12T07:54:52.183 に答える