将新列插入表中的存储过程

时间:2014-03-06 14:02:45

标签: mysql

我有一张桌子:

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `score` int(11) NOT NULL,
  PRIMARY KEY (`id`)

现在我想创建一个存储过程,将新列插入到该表中,其中包含下一个id(自动创建),name(我将编写的值)和score(我将写入)。

我试过了

DELIMITER ;;
CREATE PROCEDURE insertStudent (IN ime varchar(100),IN score int(11))
BEGIN
    insert into student (name,score) values (in_score,in_score);
END
;;

但它似乎无法奏效。

我知道这是基本的,但我需要帮助。

2 个答案:

答案 0 :(得分:1)

您是否正在插入?看起来你正试图插入一行,这更常规。

至于“似乎不起作用”,我想你从数据库中收到错误。这个错误是什么?我猜它会与查询中的未知标识符或语法错误有关。看看您的程序声明:

insertStudent (IN ime varchar(100),IN score int(11))

并在您的询问中:

insert into student (name,score) values (in_score,in_score);

查询中的in_score是什么?你从哪里得到的?你有几个问题:

  1. in_score永远不会被定义,而是您拥有名为imescore
  2. 的值
  3. 您正在尝试将相同的值插入两种不同类型的列中,但这样做无效。
  4. 您的程序声明可能还有其他问题,我对SQL的熟悉程度不够熟悉。但INint(11)对我来说很可疑。
  5. 也许您的查询 应该是这样的?:

    insert into student (name,score) values (ime,score);
    

    至少,即使它不起作用,可能会改变您所看到的错误消息。这将是朝着正确方向迈出的一步。此时继续检查错误消息以帮助调试错误。

答案 1 :(得分:0)

CREATE PROCEDURE insertStudent  @ime varchar(100),score int
as
BEGIN
    insert into student 
    values (@a1, @a2);
END

您忘记将@放在参数前面,而无需使用in 忘了放as