存储过程之一—建立简单的存储过程

一、存储过程

  存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户
通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。而我们常用的操作数据库语言SQL语句在执行的时

候需要要先编译,然后执行,所以执行的效率没有存储过程高。

  存储过程优点如下:

  • 重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量。
  • 提高性能。存储过程在创建的时候在进行了编译,将来使用的时候不再重新翻译。一般的SQL语句每执行一次就需要编译一次,所以使用存储过程提高了效率。
  • 减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。
  • 安全性。参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。

  存储过程简单语法:

CREATE PROCEDURE 存储过程名称(
  输入输出类型 变量名称 类型,

    输入输出类型 变量名称 类型

)
BEGIN
  -- 声明, 语句要完成的操作,增删改查。。。
END

二、实例

  例子中的存储过程均使用mysql作为例子。
  表结构如下:

DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

  1、只带IN(输入参数)的存储过程

  表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值.

DROP PROCEDURE IF EXISTS proc_person_findById;

-- 创建存储过程
CREATE PROCEDURE proc_person_findById(
    in n int
)
BEGIN
     SELECT * FROM person where id=n;
END

-- 定义变量
SET @n=2;
-- 调用存储过程
CALL proc_person_findById(@n);

调用结果如下:

  2、只带OUT(输出参数)的存储过程

  该值可在存储过程内部被改变,并可返回。

DROP PROCEDURE IF EXISTS proc_person_getCount

-- 创建存储过程
CREATE PROCEDURE proc_person_getCount(
    out n int(11)
)
BEGIN
     SELECT COUNT(*) INTO n FROM person ;
END 

-- 调用存储过程
CALL proc_person_getCount(@n);
SELECT @n as ‘总数‘;

调用结果如下:

  3、带IN(输入参数)和OUT(输出参数)的

  调用时指定,并且可被改变和返回

DROP PROCEDURE IF EXISTS proc_person_findInfoById; 

-- 创建存储过程
CREATE PROCEDURE proc_person_findInfoById(
    IN n INT(11),
    OUT pusername VARCHAR(255),
    OUT page INT(11)
)
BEGIN
     SELECT username, age INTO pusername, page FROM person WHERE id=n;
END

-- 定义变量
SET @id=2;
-- 调用存储过程
CALL proc_person_findInfoById(@id,@username, @age);
SELECT @username as ‘用户名‘, @age ‘年龄‘;

调用结果如下:

  

  4、带INOUT(输入输出)参数的存储过程

-- 输入输出
DROP PROCEDURE IF EXISTS proc_person_get_age;

-- 创建存储过程
CREATE PROCEDURE proc_person_get_age(
    INOUT n INT(11)
)
BEGIN
     SELECT age INTO N FROM person WHERE id=n;
END

SET @id = 1;
CALL proc_person_get_age(@id);
SELECT @id;

调用结果如下:

  5、 关于输入输出参数

  • IN为输入, 定义参数时,可以不加,不加则默认为输入参数。
  • OUT为输出,定义参数时,必须加上。
  • INOUT为输入和输出,必须加上。表示该参数可以输入也可在处理后存放结果进行输出。

存储过程之一—建立简单的存储过程

时间: 2024-07-30 02:35:01

存储过程之一—建立简单的存储过程的相关文章

简单的存储过程

一.创建存储过程 和数据表一样,在使用之前我们需要创建存储过程,它的简明语法是: QUOTE: CREATE PROC 存储过程名称 [参数列表(多个以“,”分隔)] AS SQL 语句 例:QUOTE: CREATE PROC upGetUserName @intUserId        INT, @ostrUserName NVARCHAR(20) OUTPUT               -- 要输出的参数 AS BEGIN -- 将uName的值赋给 @ostrUserName 变量,

mysql 如何创建一个简单的存储过程

1 用mysql客户端登入2 选择数据库 mysql>use test3 查询当前数据库有哪些存储过程 mysql>show procedure status where Db='test'4 创建一个简单的存储过程 mysql>create procedure hi() select 'hello'; 5 存储过程创建完毕,看怎么调用它 mysql>call hi();显示结果 mysql> call hi(); +-------+ | hello | +-------+

SQL点滴28—一个简单的存储过程

原文:SQL点滴28-一个简单的存储过程 在表中写入一条数据同事要向另外一个表中写入信息,所以会使用到事务.实际使用的时候还会一次向一个表中吸入多条数据,下面的存储过程,将字符串拆分成数组然后写入到表中. /****** Object: StoredProcedure [dbo].[sp_InsertEmployee] Script Date: 09/17/2012 23:28:42 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO

sqlserver使用户只能在某个架构下建立表和存储过程

1.首先,建立一个用户之后,默认的架构是dbo,默认的角色是public.这种情况下,这个用户将看不到dbo以及其他架构下的对象.除非单独进行授权. 2.新建一个架构test,然后使得这个架构的所有者为上面建立的用户,并且设置这个用户的默认架构为test.那么,这个新建的用户将拥有test架构对象的所有权限.但此时这个用户还没有建立表和存储过程的权限. 3.授予这个新建的用户表和存储过程的权限: use testdb:GRANT CREATE TABLE to abc: GRANT CREATE

一个简单的存储过程

create procedure proc_pay (@maxmoney int, @minmoney int, @paymonth nvarchar(20)) as begin select 储值方式,sum(台币) from 储值分析 where uid in (select uid from 储值分析 where [email protected] group by uid having sum(台币) between @minmoney and @maxmoney) group by 储

写一个简单的存储过程

-- MySQL中的三中循环 while . loop .repeat 求 1-n 的和 -- 第一种 while 循环 -- 求 1-n 的和 /* while循环语法: while 条件 DO 循环体; end while; */ create procedure add_calendar(a int) begin declare i int default 1; while i<=a DO -- 循环开始 INSERT INTO calendar(datelist) VALUES( add

mysql写存储过程/PHP写和调用存储过程

PHP调用MYSQL存储过程实例 来源: http://blog.csdn.net/ewing333/article/details/5906887 实例一:无参的存储过程 $conn = mysql_connect('localhost','root','root') or die ("数据连接错误!!!"); mysql_select_db('test',$conn); $sql = " create procedure myproce() begin INSERT IN

oracle 存储过程详细介绍(创建,删除存储过程,参数传递等)

这篇文章主要介绍了oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包等相关资料,需要的朋友可以参考下 oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为无名块,而存储过程和函数是以命名的方式存储于数据库中的.和PL/SQL程序相比,存储

kettle的“调取DB存储过程”插件(可以调取存储过程,函数)

首先明确一点"调取DB存储过程"这个插件既可以调取存储过程,又可以调取函数:函数和存储过程中的in的参数值不可以更改,out的可以更改:下面来一个实测:使用的数据库为oracle首先定义一个简单的存储过程create procedure test(jbgz in int,jj in int,gz out int) asbegingz:=jbgz+jj;--工资=基本工资+奖金:dbms_output.put_line('本月工资为:'||gz);end; 一个非常简单的转换: 然后再来