0

MySQL版本14.14 5.1.41 DISTRIB如何OUT使用LAST_INSERT_ID()存储过程

我有我试图让编译存储过程,但一个错误一直此起彼伏。我的存储过程准备插入语句,执行它,取消分配准备好的语句,然后尝试返回最后一个插入ID。 这是一个伪摘录:

1 CREATE PROCEDURE `audit`(IN pExampleValue varchar(50)) 
2 
3 BEGIN 
4 PREPARE stmt FROM 'INSERT INTO `Audit` (`Value`) VALUES (?)'; 
5 EXECUTE stmt USING @pExampleValue; 
6 DEALLOCATE PREPARE stmt 
7 
8 RETURN LAST_INSERT_ID() AS `AuditId`; 
9 END$$ 

从什么我能够收集到我的MySQL版本可以使用在存储过程中准备语句。然而,我得到的错误是。

SQL Error (1313): RETURN is only allowed in a FUNCTION 

由于错误说我不能从程序返回。但是我可以从程序中退出吗?我很难找到OUT'ed查询的例子,我将如何从这个例子中做到这一点。

回答

2

要么声明OUT参数,要么使您的程序为FUNCTION

您会在这里找到足够的文档:在出参数是宣布

http://dev.mysql.com/doc/refman/5.5/en/create-procedure.html

+0

后我怎么把最后插入的id在里面。它是否像SET @a = LAST_INSERT_ID()一样简单? – Mallow 2011-06-15 15:53:51

+1

最简单的方法:用'FUNCTION'替换'PROCEDURE'并且使第8行:'RETURN LAST_INSERT_ID();' – 2011-06-15 15:58:01

+0

我不认为可以在函数中使用准备语句,这就是我使用过程的原因。 (尽管现在并不重要,因为如果我从触发器中调用它,似乎我不能在程序中使用准备好的语句,请转到图) – Mallow 2011-06-15 16:08:54