存储过程-使用(二)

一、查询


1、简单的无参数的查询

我的数据库为后台,里面有表admin

下面就我进行对admin表查询。

USE houtai;
DELIMITER //
CREATE PROCEDURE phelloword()
BEGIN
SELECT * FROM
admin;
END//
CALL phelloword()

执行后的截图如下:

这里我在执行的时候呢,出现过下面的错误,我之前的sql语句是这样写的:

USE houtai;
CREATE PROCEDURE
phelloword()
BEGIN
SELECT
* FROM admin;
END
CALL
phelloword()

出现如下错误:

耗费了我好多时间去解决,然后从百度中看见了这个说明:

在这个问题上我纠缠了很久,在MySQL的命令行工具中执行同样不成功,但是根据提示信息可以知道执行在 SELECT ‘Hello Word!‘
AS F;处结束,后面的END;没有执行,这显然会导致错误。

这里MySQL 5.0需要选择以个分隔符,语法如下:DELIMITER //

分隔符是通知MySQL客户端已经输入完成的符号。一直都是用“;”,但是在存储过程中不行,因为存储过程中很多语句都需要用到分号。

2、带参数的存储过程

?写一个包括参数的存储过程:

USE houtai;
DELIMITER //
CREATE PROCEDURE phell(p_username CHAR(15))
BEGIN
SELECT * FROM
admin WHERE username =
p_username;
END//
CALL phell("admin")

这里定义参数p_username 然后我们往函数中传递一个值,来进行查询,结果如下:

3、写一个包括参数,变量,变量赋值,条件判断,UPDATE语句,SELECT返回结果集的完整的一个存储过程


写一个包括参数,变量,变量赋值,条件判断,UPDATE语句,SELECT返回结果集的完整的一个存储过程,如下:

CREATE PROCEDURE plogin
(
   
p_username char(15),
    p_password char(32),
    p_ip char(18),
    p_logintime
datetime
)
LABEL_PROC:
BEGIN
   
 
    DECLARE v_uid mediumint(8);  
    DECLARE
v_realpassword char(32);     
   
DECLARE v_nickname varchar(30);    
    DECLARE v_oltime smallint(6);      
   
   
SELECT u.uid, u.password, f.nickname, u.oltime INTO
v_uid, v_realpassword, v_nickname, v_oltime
    FROM
cdb_members u INNER JOIN cdb_memberfields f ON f.uid = u.uid
WHERE u.username =
p_username;   
   
    IF
(v_uid IS NULL) THEN
       
SELECT 2 AS
ErrorCode;
        LEAVE
LABEL_PROC;
    END
IF;
 
    IF (p_password <> v_realpassword) THEN
       
SELECT 3 AS
ErrorCode;
        LEAVE
LABEL_PROC;
    END
IF;
 
    UPDATE
ipsp_userexpands SET lastloginip = p_ip, lastlogintime =
p_logintime WHERE uid = v_uid;
 
    SELECT
0 AS ErrorCode,
v_uid AS uid, v_nickname AS
nickname, v_oltime AS
oltime;
 
END LABEL_PROC //

首先要说的是给变量赋值的语法,MySQL中使用SELECT u.uid, u.password, f.nickname, u.oltime INTO v_uid, v_realpassword, v_nickname, v_oltime
FROM cdb_members u INNER JOIN cdb_memberfields f ON
f.uid = u.uid WHERE u.username =
p_username;这种方式给变量赋值。

其次是条件判断的语法结构,如下所示:

IF ... THEN

...;

ELSE

IF ... THEN

...;

ELSEIF

...;

ELSE

...;

END
IF;

END IF;

最后说说LEAVE 语法的使用。当满足某种条件,不继续执行下面的SQL时,在MS SQL
SERVER中使用RETURN语法,在MySQL中我没有找到对应的关键字,但是这里可以利用LEAVE语法来满足要求,在存储过程的BEGIN前定义一个标签,如:“LABEL_PROC:” 然后再需要用到RETURN中断执行的地方执行“LEAVE
LABEL_PROC;”即可。

来自为知笔记(Wiz)

存储过程-使用(二),布布扣,bubuko.com

时间: 2024-07-30 21:41:40

存储过程-使用(二)的相关文章

存储过程返回二维数组(一)

一. import java.sql.CallableStatement;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List; import oracle.sql.Datum;import oracle.sql.STRUCT; import org.apache.ibatis

存储过程(二)

前面只是简单的看了一下这方面的文章 接着通过下面几篇文章进行进一步的学习 java 调用mysql的存储过程(简单示例) http://blog.csdn.net/caiwenfeng_for_23/article/details/8472559 java 调用MySQL存储过程 http://lcy0202.iteye.com/blog/1556132

存储过程分页(二)

我认为比较好的分页存储过程 create PROCEDURE Sp_Conn_Sort(@tblName   varchar(255),       -- 表名 @strGetFields varchar(1000) = '*',  -- 需要返回的列 @fldName varchar(255)='',      -- 排序的字段名 @PageSize   int = 40,          -- 页尺寸 @PageIndex  int = 1,           -- 页码 @doCoun

存储过程系列二:适用函数wm_concat(column)函数实现字段合并

1.学习wm_concat函数 oracle wm_concat(column)函数使我们经常会使用到的,下面就教您如何使用oraclewm_concat(column)函数实现字段合并 shopping: ----------------------------------------- u_id       goods            num ------------------------------------------ 1                苹果          

php执行多个存储过程(二)

使用公共连接文件形式 include_once 'inc/conni.php'; $result = mysqli_query($conni, "call proc_test()");    while( $row = mysqli_fetch_array($result) ){            var_dump($row);    }    mysqli_free_result($result);     mysqli_next_result($conni);echo &quo

Oracle系列:(29)存储过程和存储函数

1.存储过程[procedure] 什么是存储过程? 事先运用oracle语法写好的一段具有业务功能的程序片段,长期保存在oracle服务器中,供oracle客户端(例如,sqlplus)和程序语言远程访问,类似于Java中的函数. 为什么要用存储过程? (1)PLSQL每次执行都要整体运行一遍,才有结果 (2)PLSQL不能将其封装起来,长期保存在oracle服务器中 (3)PLSQL不能被其它应用程序调用,例如:Java 存储过程与PLSQL是什么关系? 存储过程是PLSQL的一个方面的应用

SQL 存储过程

存储过程: 存储过程(stored procedure)有时也称为sproc.存储过程存储于数据库中而不是在单独的文件中,有输入参数.输出参数以及返回值等. 在数据库中,创建存储过程和创建其他对象的过程一样,除了它使用的AS关键字外.存储过程的基本语法如下: CREATE PROCDUER|PROC <sproc name> [<parameter name>[schema.]<data type>[VARYING][=<default value>][OU

浅谈存储过程

前言 之前看了很多博客有用存储过程的,但是看不怎么懂,就没有用.在遇到组合查询的时候,相较于之前,逻辑还算是复杂些,于是想用用存储过程. 当调用好几个表的时候,只要将sql语句写入存储过程,那么复杂的过程就很简单了. 注意:因为目前为止直接出国sql sever ,所以以sql sever为例 一.概念 看看sql sever联机丛书是怎么说的: 1.存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合. 2.可以创建一个过程供永久使用,或在一个会话中临时使用

mysql--补充(视图,触发器,事务,存储过程,函数)

一:视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,因此并不推荐使用 1.1 创建视图 #语法:CRE

python-day48--mysql之视图、触发器、事务、存储过程、函数

一.视图(不推荐使用) 1).视图是一个虚拟表(非真实存在) 2).使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,因此并不推荐使用 #两张有关系的表 mysql> select * from course; +-----+--------+------------+