mysql 存储过程提示错误!!求高人解答
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 存储过程提示错误!!求高人解答相关的知识,希望对你有一定的参考价值。
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
不行啊,还是有错误 的。只是把分号位置换了下么,不行哦
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; 结束出错处理。 参考技术A 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;本回答被提问者采纳 参考技术B 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 参考技术C DELIMITER //
create procedure student()
begin
select stu_no from student;
end//
网页提示错误代码405。是啥意思?如何解决?求高人指点。。
405 Method Not Allowed:请求方法(GET、POST、HEAD、DELETE、PUT、TRACE等)对指定的资源不适用。
如何解决这个问题?
原因:
一、网络故障,导致打开网页出错。
二、电脑中毒,导致网页打开故障。
三、浏览器故障,导致网页不能正常访问。
解决:
一、打开其它网页查看是否所有网页都有这个问题,若都有则是电脑网络问题,检查网络线路,查看网络连接是否正常。
二、使用杀毒软件,对电脑进行杀毒。
三、修复浏览器。操作如下:
1、以QQ浏览器为例,首先打开浏览器点击设置按钮;
2、在打开的设置功能页面,点击最下面的“帮助”,然后点击“浏览器修复”;
3、然后会弹出浏览器修复页面,点击“一键修复”,浏览器会自动修复;
4、最后重启浏览器,就会发现网页可以正常打开,不报错了。
参考技术A 意思是资源被禁止,如何取消网页各种禁止功能 解决方案各位开发过Html网页的都知道,在<body>标签中加入一些代码,能有效的防止页面内容被复制、选择、拖拉以及禁止右键鼠标功,如:
<body ncontextmenu="return false" ndragstart="return false" nselectstart ="return false" nselect="document.selection.empty()" ncopy="document.selection.empty()" nbeforecopy="return false"onmouseup="document.selection.empty()">
本人对此功能极为反感,互联网本来就应该有“资源共享”精神。借着Panliu888与yexj00提供的思路,特描述一下简单破解的方法。
1、选择IE收藏夹,添加到收藏夹命令,将当前所在页面收藏好;
2、在收藏夹菜单中,右键刚才收藏的页面,选择属性;
3、在弹出的窗口中,URL栏中填写代码,参考:
鼠标右键:javascript.:void(document.body.oncontextmenu='')
复制:javascript.:void(document.body.oncopy='')
可选:javascript.:void(document.body.onselectstart='')
拖拉:javascript.:void(document.body.onmouseup='')
触发释放鼠标:javascript.:void(document.body.onmouseup='')
提示:需要开通几个功能,就在收藏夹中多建几个URL页面追问
不太懂。。我的是一个网页打不开.出现的这个提示的..
追答你 可以按照上面的方法进行操作呀
本回答被提问者采纳 参考技术B 回答您好,我这边正在为您查询,请稍等片刻,我这边马上回复您~
您好,我这边正在为您查询,请稍等片刻,我这边马上回复您~
您好很高兴为您解答,例1:用linux下的curl命令发送POST请求给Apache服务器上的HTML静态页
. 代码如下:
[root@localhost ~]# curl -d 11=1 http://www.jb51.net/index.html Method Not Allowed The requested method POST is not allowed for the URL /index.html. Apache/1.3.37 Server at www.jb51.net Port 80
405错误的解决方法
2
例2:用linux下的curl命令发送POST请求给nginx服务器上的HTML静态页
. 代码如下:
[root@localhost ~]# curl -d 11=1 http://www.jb51.net/index.htm 405 Not Allowed nginx/1.2.0
但在有些应用中,需要使静态文件能够响应POST请求。对于Nginx,可以修改nginc.conf配置文件,改变“405错误”为“200 ok”,并配置location来解决,方法如下:
. 代码如下:
server listen 80; server_name www.jb51.net; index index.html index.htm index.php; root /opt/htdocs; if (-d $request_filename) rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent; error_page 405 =200 @405; location @405 root /opt/htdocs; location ~ .*\\.php?$ include conf/fcgi.conf; fastcgi_pass 127.0.0.1:10080; fastcgi_index index.php;
当然也可以修改nginx源代码来解决修改源代码,重新编译安装nginx编辑nginx源代码
. 代码如下:
[root@localhost ~]# vim src/http/modules/ngx_http_static_module.c
修改: 找到下面一段注释掉
. 代码如下:
/* if (r->method & NGX_HTTP_POST) return NGX_HTTP_NOT_ALLOWED; */
最后按照原来的编译参数,重新编译安装nginx,即可。
参考技术C 405是某人或某组织在作怪,搞恶作剧、是对个人的人身攻击纯属恶劣行为。以上是关于mysql 存储过程提示错误!!求高人解答的主要内容,如果未能解决你的问题,请参考以下文章
用数据库创建存储过程,求大神解答啊,老师布置的作业,在线坐等
有一存储过程,里面实现了增删改查,我如何在C/S界面中,事件中调用此存储过程,举例说明,求高手解答!
用Navicat连接MySQL创建存储过程时提示1304错误是为啥?r并不存在呀