存储过程

SQL Server——存储过程

核能气质少年 提交于 2020-01-24 20:51:09
我想从下面几个方面大概的讲述下存储过程,可能有些知识点是你没有注意的,也可能有些知识点我不知道,欢迎大家指点指点。如有不足,欢迎指教! 存储过程概念 存储过程优点 存储过程的接口 存储过程的解析、编译过程 存储过程安全性 查看存储过程 加密、解密存储过程 存储过程概念 存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(带参存储过程)来执行它。 存储过程优点 开发过程中使用存储过程的优点, 概括起来大体有下面一些: 1: 速度快、性能好。存储过程是一组已经编译过的SQL脚本,它已经进过解析、编译、优化器优化。调用存储过程可以 重复使用它的缓存执行计划。这样节省了解析、分析等所 需消耗的CPU资源。时间 2: 存储过程存储在数据库服务器,可以减少网络通信,减少网络阻塞。 调用存储过程只需存储过程名字和参数,从而避免了 把长串的SQL语句传送到SQL 服务器,可以大大减 轻网络负担。 3: 业务逻辑封装,可以把相当一部分业务逻辑封装到存储过程中,当业务逻辑变更的时候,只要接口不变,只需修改存储过程内部逻辑就OK了,避免了业务逻辑放在代码层,业务 逻辑变动改动大的痛苦。 4: 安全性 参数化的存储过程可以减少SQL Injiection攻击,而且可以通过检验参数、授予对象执行权限提高了安全性。

通用分页存储过程

大憨熊 提交于 2020-01-24 05:40:08
CREATE PROC P_viewPage @TableName VARCHAR ( 200 ), -- 表名 @FieldList VARCHAR ( 2000 ), -- 显示列名,如果是全部字段则为* @PrimaryKey VARCHAR ( 100 ), -- 单一主键或唯一值键 @Where VARCHAR ( 2000 ), -- 查询条件 不含'where'字符,如id>10 and len(userid)>9 @Order VARCHAR ( 1000 ), -- 排序 不含'order by'字符,如id asc,userid desc,必须指定asc或desc -- 注意当@SortType=3时生效,记住一定要在最后加上主键,否则会让你比较郁闷 @SortType INT , -- 排序规则 1:正序asc 2:倒序desc 3:多列排序方法 @RecorderCount INT , -- 记录总数 0:会返回总记录 @PageSize INT , -- 每页输出的记录数 @PageIndex INT , -- 当前页数 @TotalCount INT OUTPUT, -- 记返回总记录 @TotalPageCount INT OUTPUT -- 返回总页数 AS SET NOCOUNT ON IF ISNULL ( @TotalCount , '' )

存储过程

 ̄綄美尐妖づ 提交于 2020-01-24 05:13:42
- 存储过程 - 存储过程的概念 - 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象 - 存储过程的种类 - 系统存储过程 - 以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作 - 本地存储过程 - 用户创建的存储过程是由用户创建并完成某一特定功能的存储过程,事实上一般所说的存储过程就是指本地存储过程。 - 临时存储过程 - 本地临时存储过程 - 以井字号(#)作为其名称的第一个字符,则该存储过程将成为一个存放在tempdb数据库中的本地临时存储过程,且只有创建它的用户才能执行它 - 全局临时存储过程 - 以两个井字号(##)号开始,则该存储过程将成为一个存储在tempdb数据库中的全局临时存储过程,全局临时存储过程 一旦创建,以后连接到服务器的任意用户都可以执行它,而且不需要特定的权限。 - 远程存储过程 - 远程存储过程(Remote Stored Procedures)是位于远程服务器上的存储过程,通常可以使用分布式查询和EXECUTE命令执行一个远程存储过程。 - 扩展存储过程 - 扩展存储过程(Extended Stored Procedures

Oracle存储过程详细教程

你说的曾经没有我的故事 提交于 2020-01-24 00:20:14
Oracle存储过程详细教程 点关注不迷路,欢迎再访! 目录 Oracle存储过程详细教程 一 .创建存储过程语法 二.输出案例 三.调用存储过程 3.1 声明declare关键字 3.2不声明declare关键字 3.3call 四.带有参数的存储过程 五.in,out参数问题 六.异常写法 七.循环 7.1while 循环 7.2for循环 八.基本正删改查 一 .创建存储过程语法 create or replace procedure 存储过程名 as begin -- -- -- -- -- -- -- -- -- -- -- -- -- -- end ; 注: 在存储过程(PROCEDURE)和函数(FUNCTION)中没有区别; 在视图(VIEW)中只能用AS不能用IS; 在游标(CURSOR)中只能用IS不能用AS。 二.输出案例 create or replace procedure myDemo01 as begin dbms_output . put_line ( 'hello word, my name is stored procedure' ) ; end ; as:关键字。 begin:关键字。 dbms_output.put_line(‘hello word, my name is stored procedure’); 输出内容。 end;关键字。

oracle中带参存储过程的使用

人走茶凉 提交于 2020-01-23 14:33:45
Oracle中存储过程带参分为:输入参数(in)和输出参数(out) 例如: 1 create or replace procedure out_test(v_user in emp.user_name%type, 2 v_salary out emp.salary%type, 3 v_deptno out emp.emp_deptno%type) as 4 begin 5 select salary, emp_deptno 6 into v_salary, v_deptno 7 from emp 8 where user_name = v_user; 9 exception 10 when NO_DATA_FOUND then 11 dbms_output.put_line('No data found'); 12 when TOO_MANY_ROWS then 13 dbms_output.put_line('Too many rows found'); 14 end out_test; 在命令行中调用该存储过程,利用绑定变量 1 SQL> var v_user varchar2(20); 2 SQL> var v_salary number; 3 SQL> var v_deptno number; 4 SQL> exec :v_user := 'Lisi'; 5 6 PL

使用SSMA将Oracle数据库迁移到sqlserver

試著忘記壹切 提交于 2020-01-23 02:42:35
本文以SSMAv5.3为例,简单的介绍如何将Oracle数据库迁移到sqlserver。   1.首先下载 SSMAv5.3 ,并安装;   2.在主窗口File菜单中选择New Project…菜单项将显示图2所示的对话框,输入项目的名字,选择SQL Server 2008作为迁移的目标数据库版本。   3.然后我们连接Oracle服务器,点击工具条上的Connect to Oracle,输入Server名称、SID和用户名/密码,如图4所示。连接后会有个警告对话框告诉你hr用户没有足够的权限。由于我们只需要迁移HR数据库,这里可以点击Continue忽略它。如果你的Oracle服务器上有很多数据库,数据加载可能需要比较长的时间,请耐心等待   4.连接上Oracle后我们首先评估一下迁移HR数据库会不会碰到问题,如果碰到问题大约需要多长时间来解决。评估并不需要连接目标SQL Server,只需要在左上方的树里展开Oracle服务器名称,然后展开Schemas,右键点击HR并选择Create Report,如图下所示。   5.SSMA运行一段时间后会打开一个评估报告的对话框,如图6所示。这个评估报告很有用,里面会列出HR数据库里各种对象(包括函数、包、存储过程、表和视图等)能够成功迁移的比例,你可以在左边的树里选择你需要查看的某个对象,比如存储过程,比较Oracle的PL

java调用sql server存储过程

旧街凉风 提交于 2020-01-22 21:15:18
使用java调用带有输出参数的存储过程 本例存储过程的作用为:查询用户输入的ip地址所在的位置信息(国家,省份,城市) USE [ databaseName ] GO /****** Object: StoredProcedure [dbo].[procedureName] Script Date: 12/27/2019 01:31:46 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= ALTER PROCEDURE [ dbo ] . [ procedureName ] @ip varchar ( 50 ) , @country char ( 2 ) out , @province nvarchar ( 255 ) out , @city nvarchar ( 255 ) out AS BEGIN -- SET NOCOUNT ON added

mysql存储过程

心不动则不痛 提交于 2020-01-22 13:47:52
什么是存储过程? 存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令。 简化: 能完成一定操作的一组SQL语句。 存储过程的优点 存储过程 只在创造时进行编译 , 之后每次执行存储过程都不需要再重新编译, 而一般SQL语句每执行一次就编译一次, 所以使用存储过程可提高数据执行速度。 当对数据库进行复杂操作时, 可将此复杂操作存储过程封装起来与数据库提供的事务处理综合一起使用。 存储过程可以重复使用, 可减少数据库开发人员的工作量。 安全性高, 可设定只有某些用户才具有对指定存储过程的 使用权 。 存储过程的缺点 往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要 重写 原有的存储过程。 存储过程的性能调校与撰写,受限于各种数据库系统。 模板及关键语法 创建存储过程模板 CREATE [DEFINER = { user | CURRENT_USER }] -- 定义有权限调用此存储过程的用户, 只有super用户才能使用definer  PROCEDURE sp_name ([proc_parameter[,...]]) -- 存储过程名 [characteristic ...] routine_body -- 特征性的路由本体 proc_parameter: -- 存储过程参数 [ IN | OUT | INOUT ] param

Oracle中存储过程的使用

我怕爱的太早我们不能终老 提交于 2020-01-22 07:57:07
一、什么是存储过程: 存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。 存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。在ORACLE 中,若干个有联系的过程可以组合在一起构成程序包。其优点如下: 1. 存储过程和函数以命名的数据库对象形式存储于数据库当中。存储在数据库中的优点是很明显的,因为代码不保存在本地,用户可以在任何客户机上登录到数据库,并调用或修改代码。 2. 存储过程和函数可由数据库提供安全保证,要想使用存储过程和函数,需要有存储过程和函数的所有者的授权,只有被授权的用户或创建者本身才能执行存储过程或调用函数。 3. 存储过程和函数的信息是写入数据字典的,所以存储过程可以看作是一个公用模块,用户编写的PL/SQL程序或其他存储过程都可以调用它(但存储过程和函数不能调用PL/SQL程序)。一个重复使用的功能,可以设计成为存储过程。 4. 像其他高级语言的过程和函数一样,可以传递参数给存储过程或函数,参数的传递也有多种方式。存储过程可以有返回值,也可以没有返回值

SQL 查询上级存储过程

让人想犯罪 __ 提交于 2020-01-22 01:17:09
------------------------SQL 查询上级存储过程---------------------------- create proc proc_treeUpQuery @id varchar(20) as declare @count int declare @sql varchar(5000) declare @temp varchar(2000) declare @tempCount nvarchar(2000) set @sql = 'select superiorid from b_userlist where userid = ' + @id set @temp = 'select superiorid from b_userlist where userid = ' + @id while (1=1) begin set @tempCount = 'select @count=count(superiorid) from b_userlist where userid in (' + @temp + ')' exec sp_executesql @tempCount,N'@count int output',@count output if (@count=0) begin break end else begin set @temp =