zoukankan      html  css  js  c++  java
  • Oracle 学习笔记 18 -- 存储函数和存储过程(PL/SQL子程序)

    PL/SQL子程序 它包含了函数和过程。此功能是指用户定义的函数。和系统功能是不同的。子程序通常完成特定的功能PL/SQL座。,能够被不同的应用程序多次调用。Oracle提供能够把PL/SQL程序存储在数据库中,并能够再不论什么地方来执行它。

    这样就叫做存储过程或者是函数。

    过程和函数的唯一差别就是函数总是向调用者返回数据。而过程则不返回数据。

    函数

    假设用户要常常运行某些操作,而且须要返回特定的数据。那么就能够将这些操作构造成一个函数。

    能够使用SQL语句定义函数。

    基本的语法:

    create or replace function fun_name(argument [in | out | in out ]datatype  ...)
    return datatype 
    is | as
           -- 须要定义的变量 。记录类型 。 游标
    begin
           --函数的运行体
    exception
           --处理出现的异常
    end ;

    当中,return datatype , 是要返回数据的类型。IN參数标记表示传递给函数的值在函数运行中不改变;OUT标记表示一个值在函数进行计算并通过该參数传递给调用语句;IN OUT 标记表示传递给函数的值能够变化并传递给调用语句。

    例:定义一个返回hello 的函数

    create or replace function hello
    return varchar2 
    is
    begin
           return 'Hello World';
    end ;

    运行 ,Function created ,函数创建成功。

    函数的调用。与Oracle内置函数的调用同样,能够使用select hello from dual ;进行调用,也能够使用PL/SQL语句进行调用 :

    begin 

      dbms_output.put_line(hello);

    end ;

    例:创建带參数的helloworld函数

    create or replace function helloworld(str varchar2)
    return varchar2
    is
    begin
           return 'Hello' || '_' ||str ;
    end ;

    函数的调用要在函数名称后面加上參数,即:select helloworld('World') from dual ;使用Pl/sql的调用除了加上參数外与上面同样,不在赘述。

    例:求一个部门中,员工的工资总数的函数

    create or replace function get_sal(dept number)
    return number 
    is
           v_sum number(10) := 0 ;
           cursor sal_cursor is select sal from emp where deptno = dept ;
    begin 
           for c in sal_cursor loop
               v_sum := v_sum + c.sal ;
           end loop ;
           return v_sum ;
    end ;

    存储过程

    存储过程,能够被多个应用程序调用。也能够向存储过程传递參数。向存储过程传回參数。

    基本的语法

    create or replace procedure pro_name(argument [in | out | in out ]datatype  ...) 
    is | as
           -- 须要定义的变量 ,记录类型 , 游标
    begin
           --函数的运行体
    exception
           --处理出现的异常
    end ;

    例:使用存储过程。求部门的工资总和

    create or replace procedure get_sal1(dept number ,sumsal out  number)
    is
           cursor sal_cursor is select sal from emp where deptno = dept ;
    begin 
           sumsal := 0 ;
           for c in sal_cursor loop
               sumsal := sumsal + c.sal ;
           end loop ;
           dbms_output.put_line(sumsal);
    end ;

    存储过程的调用:

    declare 
      v_sum number(10) := 0 ;
    begin 
      get_sal1(30 , v_sum);
    end ;

    调用格式:

    CALL | EXCEUTE procedure_name(arg_list) ;

    能够使用show error 命令来提示源代码的错误位置。

    使用user_error 数据字典来查看各存储过程的错误位置。

    删除过程和函数

    删除过程

    语法例如以下:

    DROP PROCEDURE[USER.]procedure_name ;

    删除函数

    语法例如以下:

    DROP FUNCTION [USER.]function_name ;


    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    Enable SPI 1.0 and 1.1 with device tre overlays on BeagleBone
    [转]使用Beaglebone Black的SPI
    真相:中国版BBB用USB连电脑没有盘符的根本原因分析
    Linux下使用locale命令设置语言环境
    locale 详解
    locale的设定及其LANG、LC_ALL、LANGUAGE环境变量的区别
    嵌入式Qt4.7.1安装详解
    【转】补充说明:关于Beaglebone black上debian无图形界面的问题及QT的窗口示例
    【转】BeagleBone Black USB一线通(3)
    [转]BeagleBone Black USB一线通(2)
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4814159.html
Copyright © 2011-2022 走看看