mysql 存储过程提示错误!!求高人解答

createprocedurestudent()beginselectstu_nofromstudentend;这个是我写的,在phpmyadmin中执行,提示错误You... create procedure student()
begin
select stu_no from student
end;
这个是我写的,在phpmyadmin中执行,提示错误
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 '' at line 4
不行啊,还是有错误 的。只是把分号位置换了下么,不行哦
展开
 我来答
lbhwrxq
2011-01-04 · TA获得超过764个赞
知道答主
回答量:490
采纳率:0%
帮助的人:270万
展开全部
用过begin——end句块的应该都接触过declare。

declare是用来定义变量和常用处理、声明之类的关键字。在mysql存储过程出现之前declare是一块鸡肋,大家常用declare来定义局部变量,我习惯性的还是使用set来定义变量(虽然是全局的,但是来的方便)。
存储过程出现后declare的标准处理定义就变成了非常强大的工具,可以用来为存储过程添加一些非常强大的错误处理机制。
首先需要提一点的是declare定义变量如果想定义varchar型的,必须注明参数最大长度,即declare varchar(20).
在这里我们不深究它用来定义参数的小细节
我们主要来研究DECLARE Condition 和 DECLARE Handler
DECLARE Condition 和 DECLARE Handler可以说是为了处理错误而生的。
功能上讲DECLARE Condition出现的时间比较早,功能也比较简单,它可以通过错误编号或者SQLSTATE来触发一各名字,说明白一点就是当某个错误编号出现的时候替换一个名字给它。这样调用的时候,我们不用去记一大串错误编号了。
它的标准语法我们可以在mysql的附注中找到。

DECLARE condition_name CONDITION FOR condition_value
condition_value:

例子如下:
DECLARE errname CONDITION FOR SQLSTATE '23000'
将返回SQLSTATE信息为23000的错误定名为errname

这个名字就可以被我们的绝对重头戏DECLARE Handler调用了,在DECLARE Handler中可以定义错误的处理办法,可以使用begin和end来标记语句块,可以单独使用rollback。处理的过程也可以定义为继续执行和中断存储过程。
标准语法:
DECLARE handler_type HANDLER FOR condition_value[,...] sp_statement

handler_type: 处理的过程。
CONTINUE 继续执行未完成的存储过程,直至结束。(常用,默认)
| EXIT 出现错误即自动跳出所在的begin不再执行后面的语句。
| UNDO 气死我了,不支持为什么写在这里,害我测试了好久都是语法错误。

condition_value: 处理的触发条件
SQLSTATE [VALUE] sqlstate_value 不用说了,最常用的错误定义,自己去查错误列表吧。
| condition_name 我们刚刚定义的那个名字errnmae就是用在这里的。
| SQLWARNING 这个太好用了,从错误编号01开始的错误。相当于错误的通配符。
| NOT FOUND 和上面差不多,从02开始。
| SQLEXCEPTION 上面两个中没有包括的错误它都可以用来触发,就是说你想定义只要出错就触发的话就定义出错条件为SQLWARNING+SQLEXCEPTION。
| mysql_error_code 错误编号,和第一个不一样,不过同样可以在错误列表从中查到,是我比较常用的。

例子
DECLARE errname CONDITION FOR SQLSTATE '23000'; 给导致错误23000的错误定义名字为errname
DECLARE continue handler for errname 当errname发生时作下面的处理
BEGIN 语句开始
set @x=1; 设置@x=1
select @x; 输出x
END; 结束出错处理。
tpj_wow
2011-01-04 · TA获得超过532个赞
知道小有建树答主
回答量:232
采纳率:100%
帮助的人:294万
展开全部
create procedure student()
begin
select stu_no from student; -- 加个分号
end;

-- 如果加了分号还不行的话,提示的错误应该是
错误:PLS-00428: 在此 SELECT 语句中缺少 INTO 子句
原因是单独的一个select语句在存储过程中是不应该存在的,所以应该改成select stu_no into 的模式
create procedure student()
is
v_stu_no student.stu_no%TYE;
begin
select stu_no into v_stu_no from student where rownum <= 1; -- 改成select into 字句
end;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
山炮小二黑
2011-01-04 · TA获得超过357个赞
知道小有建树答主
回答量:328
采纳率:100%
帮助的人:179万
展开全部
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: 查询学生编号
-- =============================================
ALTER PROCEDURE Stu_selectStu_no
AS
BEGIN
SELECT stu_no from student
END
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8728a1688
2011-01-03
知道答主
回答量:25
采纳率:0%
帮助的人:18.1万
展开全部
DELIMITER //
create procedure student()
begin
select stu_no from student;
end//
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式