2012-07-02 41 views
0

我正在创建一个小的(现在)存储过程来插入一些数据。当我创建这个时,我得到一个错误。SQL语法错误创建存储过程

DROP PROCEDURE IF EXISTS InsertTESTData; 
delimiter $$ 
CREATE PROCEDURE InsertTESTData (
p_pink_no VARCHAR, 
p_carrier VARCHAR, 
p_thisno INT 
) 
BEGIN 
INSERT INTO RefDB (pink_no,carrier,thisno) 
    VALUES 
(p_pink_no,p_carrier,p_thisno); 
END $$ 
delimiter ; 

而我总是得到的错误是1064 SQL错误如下。

Error : 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 'p_carrier VARCHAR,p_thisno IN) BEGIN INSERT INTO RefDB (pink_no,carrier,t' at line 2 

我以为我拥有了一切覆盖,我现在拉我的头发!

回答

0

您需要定义一个长度为您varchar参数,这样

p_pink_no VARCHAR(100) 

,改变

p_thisno IN 

p_thisno INT 

完整的示例:

DROP PROCEDURE IF EXISTS InsertTESTData; 
delimiter $$ 
CREATE PROCEDURE InsertTESTData (
    p_pink_no VARCHAR(100), 
    p_carrier VARCHAR(100), 
    p_thisno INT) 
BEGIN 
    INSERT INTO RefDB (pink_no,carrier,thisno) 
    VALUES (p_pink_no,p_carrier,p_thisno); 
END $$ 
delimiter ; 
+0

对不起,第二个是我粘贴到SO时的一个错字。添加长度并没有什么区别,仍然得到相同的错误 –

+0

有趣。这个对我有用。你是否得到同样的错误? –

+0

我刚刚将IN参数添加到所有值的开头,现在它正在工作!奇怪,因为我认为这是默认? –

-1

您必须声明数据类型的大小,在确定您的代码将成功执行后。 跟着这个

DROP PROCEDURE IF EXISTS InsertTESTData; 
delimiter $$ 
CREATE PROCEDURE InsertTESTData (
    p_pink_no VARCHAR(20), 
    p_carrier VARCHAR(200), 
    p_thisno number(23)) 
BEGIN 
    INSERT INTO RefDB (pink_no,carrier,thisno) 
    VALUES (p_pink_no,p_carrier,p_thisno); 
END $$ 
delimiter ;