首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

mysql中为什么调用这个存储过程会报错,该如何解决

2012-04-25 
mysql中为什么调用这个存储过程会报错我写了个存储过程,作用是将数据插入到a表中,请看源代码:SQL codeDROP

mysql中为什么调用这个存储过程会报错
我写了个存储过程,作用是将数据插入到a表中,请看源代码:

SQL code
DROP TABLE IF EXISTS a;DROP TABLE IF EXISTS b;-- 创建b表CREATE TABLE b(b1 INT NOT NULL, b2 BIGINT(20), b3 VARCHAR(50), CONSTRAINT PRIMARY KEY (b1));-- 插入b表数据INSERT INTO b VALUES (1001,201303,'b1');INSERT INTO b VALUES (1002,201403,'b2');INSERT INTO b VALUES (1003,201503,'b3');INSERT INTO b VALUES (1004,201603,'b3');INSERT INTO b VALUES (1005,201703,'b3');INSERT INTO b VALUES (1006,201803,'b3');-- 创建a表CREATE TABLE a(a1 INT NOT NULL, a2 VARCHAR(50), a3 BIGINT(20), b1 INT, CONSTRAINT PRIMARY KEY(a1), CONSTRAINT fk_b1 FOREIGN KEY (b1) REFERENCES b (b1));-- 插入a表数据INSERT INTO a VALUES (1,'SB01',20130301,1001);INSERT INTO a VALUES (2,'SB02',20140302,1002);INSERT INTO a VALUES (3,'SB03',20150303,1003);-- 创建存储过程CREATE PROCEDURE spInsa(v_a1 INT, v_a2 VARCHAR(50), v_b1 INT)BEGINDECLARE v_b2 BIGINT(20);DECLARE v_a3 BIGINT(20);SELECT b2 INTO v_b2 FROM b WHERE b1=v_b1;SET v_a3=CONCAT(v_b2,(v_a2+0));-- a3的数据是b2的数据和a2数据中数字部分联合组成的INSERT INTO a VALUES(v_a1, v_a2, v_a3, v_b1);END;

然后调用这个存储过程时报错:
SQL code
CALL spInsa(4,'SB04',1004);

[Err] 1292 - Truncated incorrect DOUBLE value: 'SB04'

不知道错在哪里,请高手们帮忙看看。

[解决办法]
SET v_a3=CONCAT(v_b2,(v_a2+0));

'SB04' + 0 ,你想得到什么结果呢? 字符串与0相加。
[解决办法]
试试set v_a3=concat(v_b2,substring(v_a2,3,2));
SQL code
mysql> create procedure spInsa(v_a1 int,v_a2 varchar(50),v_b1 int)    -> begin    -> declare v_b2 bigint(20);    -> declare v_a3 bigint(20);    -> select b2 into v_b2 from b where b1=v_b1;    -> set v_a3 = concat(v_b2,substring(v_a2,3,2));    -> insert into a values (v_a1,v_a2,v_a3,v_b1);    -> end //Query OK, 0 rows affected (0.00 sec)mysql> call spInsa(4,'SB04',1004)//Query OK, 1 row affected (0.03 sec)mysql> select * from a where a1 =4 //+----+------+----------+------+| a1 | a2   | a3       | b1   |+----+------+----------+------+|  4 | SB04 | 20160304 | 1004 |+----+------+----------+------+1 row in set (0.00 sec) 

热点排行