Re: [SQL ] select後 如果是null在insert
說明,你需要用 delimiter 去暫時改掉分號(;)作句尾,然後再改回來
建立table
mysql> CREATE TABLE `testtable` (`user_name` char(30) default NULL );
先改掉分號
mysql> delimiter //
製作procedure
mysql> CREATE PROCEDURE add_into_table ()
-> BEGIN
-> DECLARE nRows INT DEFAULT 0;
-> DECLARE c CURSOR FOR
-> SELECT COUNT(*) AS number FROM testtable;
-> OPEN c;
-> FETCH c INTO nRows;
-> CLOSE c;
-> IF nRows = 0
-> THEN INSERT INTO testtable (user_name) VALUES ('nameA');
-> ELSE INSERT INTO testtable (user_name) VALUES ('nameB');
-> END IF;
-> END;
-> //
用改掉的結尾//結束整個procedure
然後改回來用分號作結尾
mysql> delimiter ;
下面是執行結果
mysql> CALL add_into_table;
Query OK, 1 row affected (0.00 sec)
mysql> CALL add_into_table;
Query OK, 1 row affected (0.01 sec)
mysql> CALL add_into_table;
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM testtable;
+-----------+
| user_name |
+-----------+
| nameA |
| nameB |
| nameB |
+-----------+
3 rows in set (0.00 sec)
mysql>
※ 引述《kyoin (nioyk)》之銘言:
: 我試著建立預存程序了..
: 只是還是有奇怪的bug..
: DROP PROCEDURE IF EXISTS ifselect;
: CREATE PROCEDURE ifselect()
: BEGIN
: IF EXISTS (Select * From testtable ) THEN
: INSERT INTO testtable (user_name) VALUES('王小明');
: ﹋﹋﹋﹋這附近會出錯
: ELSE
: IF EXISTS (Select * From testtabel ) THEN
: INSERT INTO testtable (user_name) VALUES('陳西瓜');
: END IF;
: END
: 這是錯誤訊息
: #1064 - You have an error in your SQL syntax; check the manual that
: corresponds to your MySQL server version for the right syntax to use near
: 不曉得錯在哪邊
: 麻煩各位先進指點! 謝謝
: ※ 引述《kyoin (nioyk)》之銘言:
: : 我的資料庫版本是mysql 5.0.75
: : 想請問各位先進
: : 我如果在資料庫作select資料
: : 如果結果是null值 就insert新的資料進去
: : 若是非null值則修改某個欄位值
: : 這樣的做法 可以用SQL語法寫出來嗎?
: : 小弟知道在sql語法當中有流程控制 if..else可以使用
: : 可是就自己所了解的
: : 好像只是修改結果至欄位? 或是修改select的欄位?
: : 麻煩各位先進指點
: : 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 86.9.120.242
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
Database 近期熱門文章
PTT數位生活區 即時熱門文章