mysql里面的if語句,到底哪里錯了
mysql 里面, 變量不需要加 @ 這個符號的呀
mysql> DELIMITER //
mysql> CREATE PROCEDURE TestIfElse
-> (
-> p_val INT
-> )
-> BEGIN
-> IF (p_val = 1) THEN
-> SELECT '1' AS A;
-> ELSEIF (p_val = 2) THEN
-> SELECT '2' AS A;
-> ELSE
-> SELECT 'other' AS A;
-> END IF;
-> END//
Query OK, 0 rows affected (0.05 sec)
mysql> call TestIfElse(1);
-> //
+---+
| A |
+---+
| 1 |
+---+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql> call TestIfElse(2);
-> //
+---+
| A |
+---+
| 2 |
+---+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql> call TestIfElse(3);
-> //
+-------+
| A |
+-------+
| other |
+-------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql中if語句的expr2中怎么寫入逗號
mysql手冊中如是說:
IF(expr1,expr2,expr3)
如果 expr1 為真(expr1 0 以及 expr1 NULL),那么 IF() 返回 expr2,否則返回 expr3。IF() 返回一個數字或字符串,這取決于它被使用的語境:
mysql> SELECT IF(1>2,2,3);
-> 3
mysql> SELECT IF(1 'yes'
mysql> SELECT IF(STRCMP('test','test1'),'no','yes');
-> 'no'
如果 expr2 或 expr3 明確地為 NULL,那么函數 IF() 的返回值類型為非 NULL 列的類型。(這在選擇在 MySQL 4.0.3 中新加入)。 expr1 是作為一個整數值被計算的,這就意味著,如果測試的是一個浮點型或字符串值,就必須進行比較操作:
mysql> SELECT IF(0.1,1,0);
-> 0
mysql> SELECT IF(0.10,1,0);
-> 1
在上面第一種情況下,IF(0.1) 返回 0,是因為 0.1 被轉換為一個整數值,返回 IF(0) 的測試結果。這可能不是你所期望的。在第二種情況下,比較測試原浮點數是否為一個非零值。比較的結果被作為整數使用。 缺省的 IF() 返回值類型 (當結果存儲在臨時表中時,這是非常重要的) 在 MySQL 3.23 中按下列方式確定: 表達式 返回值
表達式(expr2)或表達式(expr3)返回值為字符串 字符串
表達式(expr2)或表達式(expr3)返回值為浮點型值 浮點型
表達式(expr2)或表達式(expr3)返回值為整型 整型
如果表達式(expr2)和表達式(expr3)均是字符串,同時兩個字符串均是忽略字母大小寫的,那么返回值也是忽略字母大小寫的(從 MySQL 3.23.51 開始)。
mysql 觸發器 if 語句 update
@sqlz ='select asd from flkg'; EXECUTE(@sqlz);----------首先,mysql下動態語句不是這樣寫的,另外,觸發器里不能允許返回結果集的.這里我是希望他能中斷更新!---------------------你的意思是不是要中斷后面的"SET amount =@amountmm WHERE CODE=* AND whcode = * ;"這部分?如果是的話,那這樣改下:DELIMITER $$USE `eerp`$$DROP TRIGGER /*!50032 IF EXISTS */ `material_update`$$CREATE TRIGGER `material_update` AFTER UPDATE ON `sf_material` FOR EACH ROW BEGIN IF *ng = 'Y' THEN SET @amountmm = (SELECT * FROM warehouse WHERE CODE=* AND whcode = *); IF @amountmm >=0 THEN UPDATE warehouse SET amount =@amountmm WHERE CODE=* AND whcode = * ; END IF ; END IF; END;$$DELIMITER ; &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"我是要中斷更新。
。不是后面。
嚴格說就是這個表sf_material更新和后面的那個表warehouse更新也一起中斷!"---------------------------------------------------------------因為mysql下觸發器內不支持rollback,所以,變換一個方式來處理,如下:那觸發器部分這么寫(注意:一定要使表TB_error_rollback在你的庫中不允許存在):CREATE TRIGGER `material_update` BEFORE UPDATE ON `sf_material` FOR EACH ROW BEGIN IF *ng = 'Y' THEN SET @amountmm = (SELECT amount- * FROM warehouse WHERE CODE=* AND whcode = *); IF @amountmm <0 THEN update TB_error_rollback set name=1; END IF; UPDATE warehouse SET amount =@amountmm WHERE CODE=* AND whcode = *; END IF;END;。
mysql中if語句的expr2中怎么寫入逗號
mysql手冊中如是說:IF(expr1,expr2,expr3) 如果 expr1 為真(expr1 <> 0 以及 expr1 <> NULL),那么 IF() 返回 expr2,否則返回 expr3。
IF() 返回一個數字或字符串,這取決于它被使用的語境: mysql> SELECT IF(1>2,2,3);-> 3mysql> SELECT IF(1<2,'yes','no');-> 'yes'mysql> SELECT IF(STRCMP('test','test1'),'no','yes');-> 'no'如果 expr2 或 expr3 明確地為 NULL,那么函數 IF() 的返回值類型為非 NULL 列的類型。(這在選擇在 MySQL 4.0.3 中新加入)。
expr1 是作為一個整數值被計算的,這就意味著,如果測試的是一個浮點型或字符串值,就必須進行比較操作: mysql> SELECT IF(0.1,1,0);-> 0mysql> SELECT IF(0.1<>0,1,0);-> 1在上面第一種情況下,IF(0.1) 返回 0,是因為 0.1 被轉換為一個整數值,返回 IF(0) 的測試結果。這可能不是你所期望的。
在第二種情況下,比較測試原浮點數是否為一個非零值。比較的結果被作為整數使用。
缺省的 IF() 返回值類型 (當結果存儲在臨時表中時,這是非常重要的) 在 MySQL 3.23 中按下列方式確定: 表達式 返回值 表達式(expr2)或表達式(expr3)返回值為字符串 字符串 表達式(expr2)或表達式(expr3)返回值為浮點型值 浮點型 表達式(expr2)或表達式(expr3)返回值為整型 整型 如果表達式(expr2)和表達式(expr3)均是字符串,同時兩個字符串均是忽略字母大小寫的,那么返回值也是忽略字母大小寫的(從 MySQL 3.23.51 開始)。
轉載請注明出處華閱文章網 » mysql中if語句