zoukankan      html  css  js  c++  java
  • oracle存储过程

    1.存储过程定义

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

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

    2.优点

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

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

    可维护性:简化维护操作

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

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

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

    实例

    1.编写存储过程无参数

     1 CREATE
     2 OR REPLACE PROCEDURE proc_show_emp (
     3     p_deptno EMPLOYEES.DEPARTMENT_ID % TYPE
     4 ) AS v_sal EMPLOYEES.SALARY % TYPE ;
     5 BEGIN
     6     SELECT
     7         AVG (salary) INTO v_sal
     8     FROM
     9         employees
    10     WHERE
    11         department_id = p_deptno ; dbms_output.put_line (
    12             p_deptno || 'average salary is :' || v_sal
    13         ) ; FOR v_emp IN (
    14             SELECT
    15                 *
    16             FROM
    17                 employees
    18             WHERE
    19                 department_id = p_deptno
    20             AND salary > v_sal
    21         ) loop DBMS_OUTPUT.PUT_LINE (
    22             v_emp.employee_id || '' || v_emp.first_name || ' ' || v_emp.last_name
    23         ) ;
    24     END loop ; EXCEPTION
    25     WHEN no_data_found THEN
    26         DBMS_OUTPUT.PUT_LINE ('ehhhee') ;
    27     END proc_show_emp ;

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

     1 CREATE
     2 OR REPLACE PROCEDURE proc_return_deptinfo (
     3     p_deptno EMPLOYEES.DEPARTMENT_ID % TYPE,
     4     p_avgsal out employees.salary % TYPE,
     5     p_count out NUMBER
     6 ) AS
     7 BEGIN
     8     SELECT
     9         AVG (salary) ,count (*) INTO p_avgsal,
    10         p_count
    11     FROM
    12         employees
    13     WHERE
    14         department_id = p_deptno ; EXCEPTION
    15     WHEN NO_data_found THEN
    16         dbms_output.put_line ('hahhaha') ;
    17     END proc_return_deptinfo ;

    3.pl/sql调用存储过程

    1 SET SERVEROUTPUT ON
    2 DECLARE 
    3 v_avgsal EMPLOYEES.SALARY % TYPE ; 
    4 v_count NUMBER ;
    5 BEGIN
    6     proc_show_emp (20) ; 
    7     PROC_RETURN_DEPTINFO (10, v_avgsal, v_count) ; 
    8     dbms_output.put_line (v_avgsal || ' ' || v_count) ;
    9 END ;

    环境oracle11R2 默认HR

  • 相关阅读:
    谷歌浏览器提示Adobe Flash Player因过期而遭到阻止
    Oracle 查看表空间剩余与创建空间语法
    招标
    iphone刷机各种错误
    oracle 创建dblink
    imp-00002 无法打开。。
    oracle 大字段clob检索
    (一)EasyUI 使用——基本概念
    使用 Google 高级搜索的一些技巧
    (四)Maven构建多模块项目
  • 原文地址:https://www.cnblogs.com/kamil/p/6074731.html
Copyright © 2011-2022 走看看