作者jacobcrab (雅古蟹)
看板Database
标题Re: [SQL ] select後 如果是null在insert
时间Fri Oct 30 07:25:35 2009
说明,你需要用 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