简介
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,中间再加点逻辑控制。
优点:
1.存储过程只在创建时编译一次,而程序中的sql语句调用都要重新编译(不绝对),可提高执行速度
2.对数据库进行复杂操作时,存储过程将多条语句组合起来,因此程序只需进行一次数据库连接,节省时间,同时也可与数据库提供的事务处理结合使用
3.存储过程可重复使用,减少数据库开发人员的工作量
4.安全性高,可设定用户使用权限
缺点:
1.调试麻烦,不过可以使用plsql进行调试,还算方便
2.如果一个项目中大量使用存储过程,而一旦数据结构发生变化,那维护起来就非常麻烦
调用与测试
可以用call 存储过程名字(参数..)或者exec 存储过程名字(参数..),来对存储过程进行调用。如果存储过程没有参数调用时也需要在最后加上括号‘()’;
在plsql中找到要测试的存储过程,右键-》测试,即可进行测试。在输入参数值后,可进行单步调试,最后可得到返回值。同时可在存储过程中加入DBMS_OUTPUT.PUT_LINE();语句打印信息。
基本语法
1.基本结构
CREATE OR REPLACE PROCEDURE 存储过程名字 //创建或替换已有存储过程,PROCEDURE可缩写为PROC ( 参数1 IN NUMBER, 返回值 OUT VARCHAR2 ) //定义参数及返回值,in表示参数,out表示返回值,后面跟的类型可以是oracle中任意合法类型,且 不带取值范围。如果没有参数与返回值,则连外面的括号一起省略 IS //IS关键字 也可用AS 变量1 NUMBER; 变量2 VARCHAR2(100) := 'ALL'; //在这个位置定义变量,变量定义的类型带取值范围,后面带封号。给变量赋值用:=符号 BEGIN //BEGIN关键字表示sql开始 NULL //这部分就是sql语句主体,如果什么都没有至少写个NULL才行 EXCEPTION //EXCEPTION关键字表示异常处理的开始,可以在语句中用RAISE关键字显式抛出异常 WHEN 异常名称 THEN DO SOMETHING //捕获特定异常并进行相应处理 这个语句可以有多个 WHEN OTHERS THEN DO SOMETHING //捕获其他异常 END; //END关键字表示sql结束
2.SELECT INTO STATEMENT
将select查询结果存入到变量中:SELECT COL1,COL2 INTO 变量1,变量2 FROM TABLE_NAME;
可以同时存多个变量,但是注意如果没有记录,将抛出NO_DATA_FOUND异常;
另外可以用%rowtype定义一个跟表相同结构的变量,然后查出一条记录存入
3.IF
IF V_TEST IS NULL THEN
do something
ELSIF V_NUM = 1 THEN
do something
ELSE
do something
END IF;
4.WHILE
WHILE V_TEST = 1 LOOP
do something
END LOOP;
5.FOR IN 使用CURSOR
CURSOR cur IS SELECT * FROM TABLE_NAME;
//游标定义在is后面也就是定义变量的地方
FOR cur_result IN cur LOOP
do something
END LOOP;
6.带参数的游标
CURSOR c_user(c_id NUMBER) IS SELECT NAME FROM USER WHERE ID = c_id
//同意定义在is后
OPEN c_user(变量值)
LOOP
FETCH c_user INTO V_NAME;
EXIT FETCH c_user%NOTFOUND;
do somthing
END LOOP;
CLOSE c_user;
7.动态SQL
execute immediate 动态SQL语句 using 参数 returing into 返回值对象
如:execute immediate 'select name from person where id = :1 and sex = :2' using p_id,p_sex returning into v_name;
这里在动态语句中:1表示第一个参数位置,p_id就是参数值,然后将查询语句的返回值赋值给v_name变量
另外如果动态语句是调用一个存储过程,且存储过程有返回值就要指明参数类型为out
如:execute immediate 'proc_get_name(:1,:2)' using in v_id,out v_name;
这里的存储过程参数1是,2是返回值
相关推荐
SAP HANA是一个高性能的内存数据库系统,它提供了一系列功能强大的工具来进行数据分析、应用开发、存储过程编写等操作。其中,对于存储过程的调试是开发者日常开发工作中的一个重要环节,SAP HANA为存储过程提供了...
SqlServer存储过程及调试指南的知识点如下: 1. 存储过程概念:存储过程是一组为完成特定功能的SQL语句集,这些语句经过编译后存储在数据库中,供用户通过指定存储过程名和参数(如有)来执行。存储过程被称作...
在IT行业中,数据库操作是日常开发中的重要环节,而存储过程是数据库中一种高效、封装性强的预编译语句集合。本问题涉及到的是在PowerBuilder(简称Pb)环境中如何调用Oracle或SQL Server等数据库中的存储过程。以下...
DB2存储过程是一种在数据库管理系统中预编译的SQL代码集合,它允许开发人员封装复杂的业务逻辑和数据处理操作,并可以被多次调用。DB2作为一款强大的关系型数据库管理系统,其存储过程功能强大,提高了应用程序的...
SQL Server存储过程是一种预编译的SQL代码集合,它们允许数据库开发者封装复杂的业务逻辑和数据操作,提高数据库应用的性能和可维护性。然而,由于存储过程的源代码通常是不可见的,对于需要查看或修改这些过程的...
在SQL Server中,存储过程分为不同种类,包括用户定义的存储过程、系统存储过程、临时存储过程以及扩展存储过程。 1. **用户定义的存储过程**:由开发人员或DBA创建,可以根据业务需求定制各种复杂操作,如数据处理...
PL/SQL Developer 调试存储过程及调试包中创建的存储过程 PL/SQL Developer 调试存储过程是指使用 PL/SQL Developer 工具来调试 Oracle 数据库中的存储过程。调试存储过程可以帮助开发者快速地定位和解决存储过程...
数据库查询的存储过程 数据库查询的存储过程是数据库管理系统中一种非常重要的概念。它可以将多个SQL语句组合成一个单元,提高数据库的查询效率和性能。 存储过程的优点: 1. 可以在单个存储过程中执行一系列SQL...
### 存储过程的优点 #### 一、提升执行效率 1. **编译优势**:存储过程在创建时仅编译一次,之后每次执行时都无需再次编译。相比之下,一般的SQL语句每次执行都需要重新编译。这种差异使得存储过程能够显著提高...
MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列SQL语句并封装成一个可重复使用的单元,从而提高数据处理的效率和代码的复用性。本教程将深入探讨MySQL存储过程的创建、调用以及相关概念...
**SQL Server 存储过程详解** SQL Server 存储过程是一种预编译的数据库对象,它集合了一系列的SQL语句和控制流语句,用于执行特定的数据库操作。存储过程的作用在于提高数据库的性能和安全性,减少网络流量,提供...
本文将从 Oracle 存储过程的基础知识开始,逐步深入到 Oracle 存储过程的高级应用,包括 Hibernate 调用 Oracle 存储过程和 Java 调用 Oracle 存储过程的方法。 Oracle 存储过程基础知识 Oracle 存储过程是 Oracle...
内容概要:简单的C# winform调用存储过程实例,创建存储过程入参,通过SqlConnection对象和SqlCommand对象调用存储过程,获取存储过程的出参并显示出来,详细代码注释,希望对用到C#调用存储过程的小伙伴有帮助 ...
在MySQL中,存储过程是一种预编译的SQL代码集合,它可以执行复杂的操作并提供更好的性能。在编写存储过程时,异常处理是确保程序稳定性和健壮性的重要环节。本实例展示了如何在MySQL存储过程中实现异常处理,以捕获...
《用友R9知识存储过程详解》 在IT行业中,特别是在企业级财务系统中,数据库的高效管理和数据处理是至关重要的。用友R9作为一款先进的财务管理系统,它利用存储过程这一强大的数据库功能来优化账务处理,提高系统...
SQL存储过程是数据库管理系统中一组为了完成特定功能的SQL语句集合,它们被预先编译并存储在数据库中,可以通过一个名称来调用执行。学习SQL存储过程是提升数据库管理和应用开发效率的关键步骤,它可以帮助我们更好...
SQL Server存储过程对比工具是一种高效且实用的软件解决方案,它专为数据库管理员和开发人员设计,用于比较和分析两个SQL Server数据库中的存储过程。这款工具的主要功能是帮助用户快速识别和定位不同数据库间存储...
在数据库管理中,存储过程和触发器是两个重要的概念,它们极大地增强了数据库的功能和效率。存储过程是一组预先编写的SQL语句,可以被多次调用,减少了网络流量,提高了性能,并提供了更好的安全性。而触发器则是一...