存储过程

MySQL基础篇(04):存储过程和视图,用法和特性详解

こ雲淡風輕ζ 提交于 2020-01-06 14:54:40
本文源码: GitHub·点这里 || GitEE·点这里 一、存储过程 1、概念简介 存储程序是被存储在服务器中的组合SQL语句,经编译创建并保存在数据库中,用户可通过存储过程的名字调用执行。存储过程核心思想就是数据库SQL语言层面的封装与重用性。使用存储过程可以较少应用系统的业务复杂性,但是会增加数据库服务器系统的负荷,所以在使用时需要综合业务考虑。 2、基本语法格式 CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body 案例一:计算消费折扣 -- 创建存储过程 DROP PROCEDURE IF EXISTS p01_discount ; CREATE PROCEDURE p01_discount(IN consume NUMERIC(5,2),OUT payfee NUMERIC(5,2)) BEGIN -- 判断收费方式 IF(consume>100.00 AND consume<=300.00) THEN SET payfee=consume*0.8; ELSEIF (consume>300.00) THEN SET payfee=consume*0.6; ELSE SET payfee = consume; END IF; SELECT payfee AS

MySQL基础篇(04):存储过程和视图,用法和特性详解

天大地大妈咪最大 提交于 2020-01-06 08:01:18
本文源码: GitHub·点这里 || GitEE·点这里 一、存储过程 1、概念简介 存储程序是被存储在服务器中的组合SQL语句,经编译创建并保存在数据库中,用户可通过存储过程的名字调用执行。存储过程核心思想就是数据库SQL语言层面的封装与重用性。使用存储过程可以较少应用系统的业务复杂性,但是会增加数据库服务器系统的负荷,所以在使用时需要综合业务考虑。 2、基本语法格式 CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body 案例一:计算消费折扣 -- 创建存储过程 DROP PROCEDURE IF EXISTS p01_discount ; CREATE PROCEDURE p01_discount(IN consume NUMERIC(5,2),OUT payfee NUMERIC(5,2)) BEGIN -- 判断收费方式 IF(consume>100.00 AND consume<=300.00) THEN SET payfee=consume*0.8; ELSEIF (consume>300.00) THEN SET payfee=consume*0.6; ELSE SET payfee = consume; END IF; SELECT payfee AS

SQL Server分页查询存储过程

情到浓时终转凉″ 提交于 2020-01-06 02:16:57
--分页存储过程 create PROCEDURE [dbo].[commonPagination] @columns varchar(500), --要显示的列名,用逗号隔开 @tableName varchar(100), --要查询的表名 @orderColumnName varchar(100), --排序的列名 @order varchar(50), --排序的方式,升序为asc,降序为 desc @where varchar(100), --where 条件,如果不带查询条件,请用 1=1 @pageIndex int, --当前页索引 @pageSize int, --页大小(每页显示的记录条数) @pageCount int out --总页数,输出参数 as begin declare @sqlRecordCount nvarchar(1000) --得到总记录条数的语句 declare @sqlSelect nvarchar(1000) --查询语句 set @sqlRecordCount=N'select @recordCount=count(*) from ' +@tableName + ' where '+ @where declare @recordCount int --保存总记录条数的变量 exec sp_executesql

调用Oracle存储过程并获取out参数值

独自空忆成欢 提交于 2020-01-05 21:08:35
原文: http://tech.it168.com/oldarticle/2006-04-02/200604021512359.shtml http://www.cnblogs.com/m-cnblogs/archive/2012/02/23/2364906.html 1.创建测试存储过程: SQL> create or replace procedure proc_test(p1 IN varchar2,p2 OUT varchar2) is 2 begin 3 SELECT p1 INTO p2 FROM dual; 4 end proc_test; 5 / 过程被创建 2.主要C# 代码以及注意点: using ORAC = System.Data.OracleClient; private void button1_Click(object sender, System.EventArgs e) { try { string str_Sql = @"call proc_test(:p1,:p2)"; /*不能用:call proc_test(?,?)或者call proc_test(@p1,@p2),这样会报ORA-01036:非法的变量名/编号错误 */ ORAC.OracleCommand cmd = new ORAC.OracleCommand(str_Sql

MySQL 存储过程参数用法 in, out, inout

℡╲_俬逩灬. 提交于 2020-01-05 21:08:24
MySQL 存储过程参数有三种类型:in、out、inout。它们各有什么作用和特点呢? 一、MySQL 存储过程参数(in) MySQL 存储过程 “in” 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数,但对 in 类型参数的修改,对调用者(caller)来说是不可见的(not visible)。 drop procedure if exists pr_param_in; create procedure pr_param_in ( in id int -- in 类型的 MySQL 存储过程参数 ) begin if (id is not null) then set id = id + 1; end if; select id as id_inner; end; set @id = 10; call pr_param_in(@id); select @id as id_out; mysql> call pr_param_in(@id); +----------+ | id_inner | +----------+ | 11 | +----------+ mysql> select @id as id_out; +--------+ | id_out | +--------+ | 10 | +--------+ 可以看到:用户变量 @id

MySQL 存储过程参数用法 in, out, inout

China☆狼群 提交于 2020-01-05 21:08:14
MySQL 存储过程参数有三种类型:in、out、inout。它们各有什么作用和特点呢? 一、MySQL 存储过程参数(in) MySQL 存储过程 “in” 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数,但对 in 类型参数的修改,对调用者(caller)来说是不可见的(not visible)。 drop procedure if exists pr_param_in; create procedure pr_param_in ( in id int -- in 类型的 MySQL 存储过程参数 ) begin if (id is not null) then set id = id + 1; end if; select id as id_inner; end; set @id = 10; call pr_param_in(@id); select @id as id_out; mysql> call pr_param_in(@id); +----------+ | id_inner | +----------+ | 11 | +----------+ mysql> select @id as id_out; +--------+ | id_out | +--------+ | 10 | +--------+ 可以看到:用户变量 @id

MySQL 存储过程参数IN OUT INOUT区别

谁说我不能喝 提交于 2020-01-05 21:08:02
MySQL 存储过程参数IN OUT INOUT对比 一、IN -- 创建测试存储过程 delimiter // create procedure p_in ( IN num int ) begin select num; set num=100; select num; end; // delimiter ; set @num=100; call p_in(@num) 二、OUT -- 创建测试存储过程 delimiter // create procedure p_out ( OUT num int ) begin select num; set num=100; select num; end; // delimiter ; set @num=100; call p_out(@num) 三、INOUT -- 创建测试存储过程 delimiter // create procedure p_inout ( INOUT num int ) begin select num; set num=100; select num; end; // delimiter ; set @num=100; call p_inout(@num) 总结: IN 输入参数 表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值 仅需要将数据传入存储过程

(原) ORA-01704:文字字符串过长

最后都变了- 提交于 2020-01-05 03:56:45
环境:oracle 10g ODP.NET VS2005 问题重现: 在利用ODP向oracle中插入数据时,如果这样写: insert into clobTable (id, story) values(1,'....'); 其中story为clob类型 如果story的长度大于2000字节,直接插入将出现 ORA-01704:文字字符串过长 的错误。 解决方案: 方案一、利用参数 insert into clobTable (id, story) values(1,:story); OracleParameter param = new OracleParameter("story", OracleDbType.Clob); param.Direction = ParameterDirection.Input; param.Value = str; cmd.Parameters.Add(param); 方案二、利用存储过程 这个就不用说了,写个存储过程,把参数传入即可。 来源: https://www.cnblogs.com/mjgforever/archive/2007/12/27/1016515.html

C#工具类SqlServerHelper,基于System.Data.SqlClient封装

℡╲_俬逩灬. 提交于 2020-01-03 21:18:08
源码: 1 using System; 2 using System.Collections.Generic; 3 using System.Data; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 using System.Data.SqlClient; 8 9 namespace Fly.Util.DataBase 10 { 11 /// <summary> 12 /// SqlServer数据库操作类 13 /// </summary> 14 public static class SqlServerHelper 15 { 16 /// <summary> 17 /// 执行数据库非查询操作,返回受影响的行数 18 /// </summary> 19 /// <param name="connectionString">数据库连接字符串</param> 20 /// <param name="cmdType">命令的类型</param> 21 /// <param name="cmdText">SqlServer存储过程名称或PL/SQL命令</param> 22 /// <param name="cmdParms">命令参数集合</param> 23 ///

SQL Server查询优化与事务处理

早过忘川 提交于 2020-01-03 08:05:28
博文目录 一、索引 二、视图 三、存储过程 四、系统存储过程 五、触发器 六、事务 七、锁 一、索引 索引提供指针以指向存储在表中指定列的数据值,然后根据指定的次序排列这些指针,再跟随指针到达包含该值的列。 1、什么是索引 数据库中的索引与书籍中的目录相似。在一本书中,无需阅读整本书,利用目录就可以快速的查找到所需的信息。在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需的数据。书中的目录就是一个词语列表,其中注明了包含各个词的页码。而数据库中的索引是某个表中一列或若干列值的集合,以及物理表示这些值得数据业的逻辑指针清单。 索引是SQL Server编排数据的内部方法,它为SQL Server提供一种方法来编排查询数据的路由。 索引页是数据库中存储索引的数据页。索引页存放检索数据行的关键字页以及该数据行的地址指针。通过使用索引,可以大大提高数据库的检索速度,改善数据库性能。 2、索引分类 1)唯一索引 唯一索引不允许两行具有相同的索引值。 如果现有数据中存在重复的键值,则一般情况下大多数数据库不允许创建唯一索引。当新数据使表中的键值重复时,数据库也拒绝接收此数据。创建了唯一约束,将自动创建唯一索引。尽管唯一索引有助于找到信息,但是为了获得最佳性能,建议使用主键约束。 2)主键索引 在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。