Re: [SQL ] select後 如果是null在insert

看板Database (資料庫)作者 (雅古蟹)時間16年前 (2009/10/30 07:25), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
說明,你需要用 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
文章代碼(AID): #1AwYHpq0 (Database)
文章代碼(AID): #1AwYHpq0 (Database)