一、子程序

  子程序是已命名的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> --存储过程的更多相关文章

  1. Oracle基础了解

    数据库: 关系型数据库 select * from 表名 非关系型数据库(做不到复杂查询) 以对象的形式进行存储 {"aaa":"ccc"}---键值对 ora ...

  2. ORACLE| ORACLE基础语法汇总

    创 ORACLE| ORACLE基础语法汇总 2018-07-18 16:47:34 YvesHe 阅读数 9141更多 分类专栏: [数据库]   版权声明:本文为博主原创文章,遵循CC 4.0 B ...

  3. Oracle 基础1

    oracle基础 表空间: Oracle数据库对数据的管理是基于表空间的概念来的, 各种数据的以及存储数据的优化, 实际上也是通过优化表空间来实现的 表空间分类: 永久表空间 用来存放表的数据, 视图 ...

  4. 数据治理中Oracle SQL和存储过程的数据血缘分析

    数据治理中Oracle SQL和存储过程的数据血缘分析   数据治理中的一个重要基础工作是分析组织中数据的血缘关系.有了完整的数据血缘关系,我们可以用它进行数据溯源.表和字段变更的影响分析.数据合规性 ...

  5. Oracle打怪升级之路一【Oracle基础、Oracle查询】

    前言 背景:2021年马上结束了,在年尾由于工作原因接触到一个政府单位比较传统型的项目,数据库用的是Oracle.需要做的事情其实很简单,首先从大约2000多张表中将表结构及数据导入一个共享库中,其次 ...

  6. Dapper完美兼容Oracle,执行存储过程,并返回结果集。

    Dapper完美兼容Oracle,执行存储过程,并返回结果集. 这个问题,困扰了我整整两天. 刚刚用到Dapper的时候,感觉非常牛掰.特别是配合.net 4.0新特性dynamic,让我生成泛型集合 ...

  7. oracle基础教程(8)oracle修改字符集

    oracle基础教程(8)oracle修改字符集 1.用dba连接数据库 -->sqlplus / as sysdba 2.查看字符集 -->SELECT parameter, value ...

  8. Oracle中执行存储过程call和exec区别

    Oracle中执行存储过程call和exec区别 在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是e ...

  9. Oracle job procedure 存储过程定时任务

    Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 ...

随机推荐

  1. 编译ffmpeg(iOS)

    一,x264库的编译 首先到http://www.videolan.org/developers/x264.html下载x264的库,然后解压,修改文件夹名称为x264     二,下载ffmpeg2 ...

  2. as自定义菜单。

    与菜单相关的类一共有3个 ContextMenu类 ContextMenuBuiltInItems类 //与系统内置菜单相关的类 ContextMenuItem类 //与用户自定义菜单相关的类

  3. CSS3- px、em、rem区别介绍

    PX px像素(Pixel).相对长度单位.像素px是相对于显示器屏幕分辨率而言的. PX特点 1. IE无法调整那些使用px作为单位的字体大小: 2. 国外的大部分网站能够调整的原因在于其使用了em ...

  4. CircleWaveProgressBar

    https://github.com/eltld/CircleWaveProgressBar

  5. PHP apache2.2 mysql 的安装

    1.安装准备 我的系统为win7 旗舰版 php:http://windows.php.net/downloads/releases/php-5.3.6-Win32-VC9-x86.zip mysql ...

  6. jquery.validate+jquery.form提交的三种方式

    原文:http://www.cnblogs.com/datoubaba/archive/2012/06/06/2538873.html jquery.validate+jquery.form提交的三种 ...

  7. [原创]Microsoft.AnalysisServices.ManagementDialogs.ServerPropertiesLanguagePanel 的类型初始值设定项引发异常

    问题: 安装SQL SERVER 2012 SP1后,有可能在右键AS服务器想打开属性面板时候会出现如下错误:   解决: 这个需要安装相应的热修复补丁470544 相应文章: http://smal ...

  8. linux入侵检测系统snort安装配置

    队长让俺瞅瞅snort,没想到安装配置都遇到问题...整理下过程,给跟我一样的家伙看看.. 由于本人机器是ubuntu,apt-get 几下就可以了,其实网上有不少这样的文章...之所以还要写就是.. ...

  9. 项目源码--JSP在线客服系统(SSH框架技术)源码

    下载源码 技术要点: 1.网站开发技术框架 2.SSH技术框架(Struct,Spring,Hibrnate) 3.JSP技术框架 4.MYSQL数据库数据存储 5.即时通讯技术 6.源码带详细的中文 ...

  10. 代码片段 - Golang 创建 .tar.gz 压缩包

    Golang创建 .tar.gz 压缩包 tar 包实现了文件的打包功能,可以将多个文件或目录存储到单一的 .tar 文件中,tar 本身不具有压缩功能,只能打包文件或目录: import " ...