1.存储过程定义

储存程序 (Stored Procedure),又可称预储程序或者存储过程,是一种在数据库中存储复杂程序,
以便外部程序调用的一种数据库对象,它可以视为数据库中的一种函数或子程序。--维基百科

存储子程序是指被命名的PL/SQL 块,以编译的形式存储在数据库服务器中,可以在应用程序中进行调用,是PL/SQL程序模块化的一种体现。Pl/SQL中的存储子程序包括存储过程和(存储)函数两种。通常存储过程用于执行特定的操作,不需要返回值;而函数则用于返回特定的数据。在调用时,存储过程可以作为一个独立的表达式被调用,而甘肃只能作为表达式的一个组成部分被调用。

2.优点

模块化:将程序分解为逻辑模块

可重用性:可以被任意程序调用

可维护性:简化维护操作

安全性: 用户无需直接访问表,分装起来

提高性能:减少网络流量,直接传输存储过程名和参数

过程是用于完成特定任务的子程序

实例

1.编写存储过程无参数

 CREATE
OR REPLACE PROCEDURE proc_show_emp (
p_deptno EMPLOYEES.DEPARTMENT_ID % TYPE
) AS v_sal EMPLOYEES.SALARY % TYPE ;
BEGIN
SELECT
AVG (salary) INTO v_sal
FROM
employees
WHERE
department_id = p_deptno ; dbms_output.put_line (
p_deptno || 'average salary is :' || v_sal
) ; FOR v_emp IN (
SELECT
*
FROM
employees
WHERE
department_id = p_deptno
AND salary > v_sal
) loop DBMS_OUTPUT.PUT_LINE (
v_emp.employee_id || '' || v_emp.first_name || ' ' || v_emp.last_name
) ;
END loop ; EXCEPTION
WHEN no_data_found THEN
DBMS_OUTPUT.PUT_LINE ('ehhhee') ;
END proc_show_emp ;

2.编写存储过程*(有参数)

 CREATE
OR REPLACE PROCEDURE proc_return_deptinfo (
p_deptno EMPLOYEES.DEPARTMENT_ID % TYPE,
p_avgsal out employees.salary % TYPE,
p_count out NUMBER
) AS
BEGIN
SELECT
AVG (salary) ,count (*) INTO p_avgsal,
p_count
FROM
employees
WHERE
department_id = p_deptno ; EXCEPTION
WHEN NO_data_found THEN
dbms_output.put_line ('hahhaha') ;
END proc_return_deptinfo ;

3.pl/sql调用存储过程

 SET SERVEROUTPUT ON
DECLARE
v_avgsal EMPLOYEES.SALARY % TYPE ;
v_count NUMBER ;
BEGIN
proc_show_emp (20) ;
PROC_RETURN_DEPTINFO (10, v_avgsal, v_count) ;
dbms_output.put_line (v_avgsal || ' ' || v_count) ;
END ;

环境oracle11R2 默认HR

oracle存储过程的更多相关文章

  1. oracle 存储过程

    来自:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 I ...

  2. Oracle存储过程语法

    原文链接:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程  1 CREATE OR REPLACE PROCEDURE 存储过程名  ...

  3. ORACLE存储过程调用Web Service

    1. 概述 最近在ESB项目中,客户在各个系统之间的服务调用大多都是在oracle存储过程中进行的,本文就oracle存储过程调用web service来进行说明.其他主流数据库,比如mysql和sq ...

  4. Oracle存储过程基本语法介绍

    Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...

  5. MyBatis调用Oracle存储过程

    MyBatis调用Oracle存储过程 1.无输入和输出参数的存储过程 2.带有输入和输出参数的存储过程 3.返回游标的存储过程 mybatis中的配置文件代码 <resultMap type= ...

  6. Oracle存储过程(转)

    Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...

  7. Oracle存储过程中异常Exception的捕捉和处理

    Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...

  8. Oracle存储过程动态创建临时表/存储过程执行权限问题--AUTHID CURRENT_USER

    关于Oracle存储过程执行权限问题的解决 http://blog.sina.com.cn/s/blog_6ceed3280101hvlo.html (2014-04-02 04:06:28) 转载▼ ...

  9. ORACLE存储过程学习

    存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR REPLACE PROCEDURE ...

  10. C# 获取 oracle 存储过程的 返回值1

    /// <summary> /// 返回对应表的模拟自增字段值 /// </summary> /// <param name="tablename"& ...

随机推荐

  1. 如何在webapp中做出原生的ios下拉菜单效果

    github:https://github.com/zhoushengmufc/iosselect webapp模仿ios下拉菜单 html下拉菜单select在安卓和IOS下表现不一样,iossel ...

  2. Tomcat 日志清除(含扩展AccessLogValve)

    1.tomcat的访问日志AccessLogs定期或者定量删除 a 开启tomcat访问日志 编辑${catalina}/conf/server.xml文件.注:${catalina}是tomcat的 ...

  3. Looper.prepare()和Looper.loop()

    什么时候需要 Looper Looper用于封装了android线程中的消息循环,默认情况下一个线程是不存在消息循环(message loop)的,需要调用Looper.prepare()来给线程创建 ...

  4. 【代码笔记】iOS-自定义弹出框

    代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [s ...

  5. Android入门(一)

    原文链接:http://www.orlion.ga/387/ 一.安卓的系统架构 1. linux内核层,这一层为安卓设备提供底层的驱动 系统运行库层,这一层通过一些C/C++库来为Android系统 ...

  6. Windows下SVN服务器的搭建步骤

    1.下载svn服务端和客户端 服务端VISUALSVN SERVER:https://www.visualsvn.com/ 客户端TortoiseSVN:https://tortoisesvn.net ...

  7. Atitit.css 规范 bem  项目中 CSS 的组织和管理

    Atitit.css 规范 bem  项目中 CSS 的组织和管理 1. 什么是BEM?1 1.1. 块(Block)2 1.2. 元素(Element)2 1.3. BEM树(和DOM树类似).3 ...

  8. Mysql联合,连接查询

    一. 联合查询    UNION, INTERSECT, EXCEPT UNION运算符可以将两个或两个以上Select语句的查询结果集合合并成一个结果集合显示,即执行联合查询.UNION的语法格式为 ...

  9. python迭代器实现斐波拉契求值

    斐波那契数列(Fibonacci sequence),又称黄金分割数列,也称为"兔子数列":F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*).例 ...

  10. ascii、unicode、utf、gb等编码详解

    很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称为"字节".再后来,他们又做了一些可以处理这 ...