Oracle 基础 <1> --存储过程
|
一、子程序 子程序是已命名的PL/SQL块,它们存储在数据库中,可以Wie它们指定参数,可以从任何数据库客户端和应用程序中调用它们。子程序包括存储过程和函数。 子程序包括: 1、声明部分:声明部分包括类型、游标、常量、变量、异常和嵌套子程序的声明。这些项都是局部的,在退出后就不复存在。 2、可执行部分:可执行部分包括赋值、控制执行过程以及操纵ORacle数据的语句。 3、异常处理部分: 异常处理部分包括异常处理程序,负责处理执行存储过程中出现的异常。 子程序的优点: 1、模块化:通过子程序,可以将程序分解为可管理的、明确的逻辑模块。 2、可重用性:子程序在创建并执行后,就可以再任意数目的应用程序中使用。 3、可维护性:子程序可以简化维护操作,因为如果一个子程序受到影响,则只需修改该子程序的定义。 4、安全性:用户可以设置权限,使得访问数据的唯一方式就是通过用户提供的存储过程和函数。不仅可以让数据更安全,而且可以保证它的正确性。 |
一:存储过程的优点
(1.模块化:通过子程序,可以对用来实现一种业务逻辑,一个业务功能。
(2.可重用性:存储过程被创建之后,就可以在任意数目的应用程序中使用。
(3.可维护性:可以简化维护操作
(4.安全性:用户可以设置权限。
缺点:
1.移植问题
2.重新编译问题
3.需求变更问题
二:存储过程的用法
1.存储过程的创建
创建语法:
CREATE [OR REPLACE] PROCEDURE procedure_name --名称
[(paraameter_list)] --要用的参数
{IS/AS}
[local_declarations]--局部声明的变量
BEGIN
executable_statements;--执行的内容
[EXCEPTION]
[exception_handlers] --异常处理部分
END [procedure_name] --名称
说明:
procedure_name:为存储过程的名字;
paraameter_list:参数列表,参数中可以使用in和out表示输入和输出参数。可选
AS表示其他变量声明,IS表示显示游标声明
local_declarations:局部声明,可选
executable_statements:可执行语句
exception_handlers:异常处理语句,可选
OR REPLACE:可选。如果不包含,创建存储过程如果存在会报错,包含存在会替换。
2.存储过程的调用
调用语法:
execute procedure_name (parameters_list);
说明:
execute:执行命令,可以缩写为exec。
procedure_name:存储过程的名称。
parameters_list:存储过程的参数列表。
1)命令行方式:2)PLSQL方式: --PL/SQL方式,不需要使用exec
3、存储过程的参数模式:
(1)in:输入
(2)out:输出
(3)in out:输入\输出
定义存储过程参数语法:
parameter_name [IN|OUT|IN OUT] dateType [{:= | default} expression]
注意:
1)参数IN模式是默认模式。如果未指定参数模式,则默认为IN。对于OUT和IN OUT参数,必须明确指定。
2)可以再参数列表中为IN参数指定默认值,OUT和IN OUT不可用。
4、存储过程的授权
语法:
*grant execute on procedure_name(存储过程名称) to user(用户) --赋予用户 执行权
*grant execute on procedure_name(存储过程名称) to user(用户) with grant option --该用户也可以有把该权限授予其他用户
5.存储过程的删除
语法:
dropp procedure 名称;
三.程序块的跟踪和调试
1、在SQL*plus下调试
语法:
show errors (查看的程序块的类型procedure) (程序块的名称); --查看某个程序块是否存在编译错误
2、在PL/SQL Developer 工具调试
F9:开始调试
Ctrl+R:执行
Ctrl+N:单步进入
Ctrl+O:单步跳过
Ctrl+T:单步跳出
四.程序过程和游标的用法
--带游标的存储过程
CREATE OR REPLACE PROCEDURE PRO_EMP_IN (EMP_CUR SYS_REFCURSOR) AS
V_NAME EMP.ENAME%TYPE;
V_SAL EMP.SAL%TYPE;
BEGIN
LOOP
FETCH EMP_CUR
INTO V_NAME, V_SAL;
DBMS_OUTPUT.PUT_LINE('name:' || V_NAME || ' sal:' || V_SAL);
EXIT WHEN EMP_CUR%NOTFOUND;
END LOOP;
END;
--调用带游标的存储过程:
DECLARE
EMP_CUR SYS_REFCURSOR;
BEGIN
OPEN EMP_CUR FOR
SELECT ENAME, SAL FROM EMP;
PRO_EMP_IN(EMP_CUR => EMP_CUR);
CLOSE EMP_CUR;
END;
--调用带输出类型的游标的存储过程
DECLARE
V_NAME EMP.ENAME%TYPE;
V_SAL EMP.SAL%TYPE;
EMP_CUR SYS_REFCURSOR; --声明系统游标类型
BEGIN
PRO_EMP(EMP_CUR => EMP_CUR);
LOOP
FETCH EMP_CUR INTO V_NAME, V_SAL;
DBMS_OUTPUT.PUT_LINE('name:' || V_NAME || ' sal:' || V_SAL);
EXIT WHEN EMP_CUR%NOTFOUND;
END LOOP;
CLOSE EMP_CUR;
END;
五.程序过程和事务的用法
(1)自主事务:是由另一个事务处理(主事务处理)启动的独立事务处理。
自主事务:是由零一个事务启动的独立事务处理。自主事务处理可以暂停主事务处理,也就是处理自己存储过程内部的事务,当自主事务处理完之后会恢复主事务处理。
PRAGMA AUTONOMOUS_TRANSACTION; --定义为自主事务,不受其他事务提交,回滚的影响
总结自主事务:
1、自主事务处理结果的变化不依赖于主事务处理的状态或最终配置。
2、自主事务处理提交或回滚时,不影响主事务处理的结果。
3、自主事务提交一旦提交,该自主事务处理结果的变化对于其他事务处理就是课件的。这意味着,用于可以访问已更新的信息,无需等待主事务处理提交。
4、自主事务处理可以启动其它自主事务处理。
Oracle 基础 <1> --存储过程的更多相关文章
- Oracle基础了解
数据库: 关系型数据库 select * from 表名 非关系型数据库(做不到复杂查询) 以对象的形式进行存储 {"aaa":"ccc"}---键值对 ora ...
- ORACLE| ORACLE基础语法汇总
创 ORACLE| ORACLE基础语法汇总 2018-07-18 16:47:34 YvesHe 阅读数 9141更多 分类专栏: [数据库] 版权声明:本文为博主原创文章,遵循CC 4.0 B ...
- Oracle 基础1
oracle基础 表空间: Oracle数据库对数据的管理是基于表空间的概念来的, 各种数据的以及存储数据的优化, 实际上也是通过优化表空间来实现的 表空间分类: 永久表空间 用来存放表的数据, 视图 ...
- 数据治理中Oracle SQL和存储过程的数据血缘分析
数据治理中Oracle SQL和存储过程的数据血缘分析 数据治理中的一个重要基础工作是分析组织中数据的血缘关系.有了完整的数据血缘关系,我们可以用它进行数据溯源.表和字段变更的影响分析.数据合规性 ...
- Oracle打怪升级之路一【Oracle基础、Oracle查询】
前言 背景:2021年马上结束了,在年尾由于工作原因接触到一个政府单位比较传统型的项目,数据库用的是Oracle.需要做的事情其实很简单,首先从大约2000多张表中将表结构及数据导入一个共享库中,其次 ...
- Dapper完美兼容Oracle,执行存储过程,并返回结果集。
Dapper完美兼容Oracle,执行存储过程,并返回结果集. 这个问题,困扰了我整整两天. 刚刚用到Dapper的时候,感觉非常牛掰.特别是配合.net 4.0新特性dynamic,让我生成泛型集合 ...
- oracle基础教程(8)oracle修改字符集
oracle基础教程(8)oracle修改字符集 1.用dba连接数据库 -->sqlplus / as sysdba 2.查看字符集 -->SELECT parameter, value ...
- Oracle中执行存储过程call和exec区别
Oracle中执行存储过程call和exec区别 在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是e ...
- Oracle job procedure 存储过程定时任务
Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 ...
随机推荐
- CentOS6 下安装JDK7
1.下载JDK:http://www.oracle.com/technetwork/java/javase/archive-139210.html,选择Java SE 7,下载jdk-7u80-lin ...
- 正确理解ContentPresenter
下图显示继承关系: ContentControl:Control (在Control類並沒有Content屬性, 所以在這之上再寫了一個ContentControl, 使控件有Content屬性可以顯 ...
- 获取select当前选择的值和文本
<html> <head> <script type="text/javascript"> function EE(obj) { alert(& ...
- erlang web socket参考。
出自: http://blog.sina.com.cn/s/blog_96b8a15401010g71.html
- table布局 height=100%无效分析
(从死了一次又一次终于挂掉的百度空间中抢救出来的,发表日期 2014-08-11) 原文链接:http://www.cnblogs.com/gaojun/archive/2012/05/07/2487 ...
- 通过RDB还原用户误删除的邮件
1.在任意一台邮箱服务器上新建RDB数据库目录:C:\rdb01 2.使用Windows Server Backup还原已备份的邮件数据(mbdb02)库到 C:\rdb01 目录下 3.创建RDB数 ...
- 试读《基于MVC的JavaScript Web富应用开发》
前两年做jsp开发时,用了不少JavaScript(JS)和Ajax, 最近的项目一直在使用Flex做前台,虽然也有类似的ActionScript实现JS的功能,但没想到的是,短短几年JS发展如此迅速 ...
- 数据库的应用——直接从内存中读取osg节点 (转)
数据库的应用——直接从内存中读取osg节点 目的:要从数据库中读取节点数据到osg. 一开始的方法是这样的,每当我要添加一个数据库中的节点数据时,首先把它读取到内存中,然后写入一个文件,最后再次从文件 ...
- DedeCMS调用多说评论系统遇到的一些问题
最近前端笔记加入了多说的评论,因为自带的评论太渣了.过程不是很顺利,把遇到的问题和大家分享下.我用的dedecms,所以使用的是dede的多说评论模块.效果图: 多说官方下载:http://dev.d ...
- [Angular 2] Share a Service Across Angular 2 Components and Modules
Services are used to share data between components. They follow a module pattern that allows you to ...