zoukankan      html  css  js  c++  java
  • 存储过程和函数的区别

    存储过程和函数目的是为了 可重复地 执行操作数据库的sql语句的集合。

    区别是写法和调用上。

    写法上:存储过程的参数列表可以有输入参数、输出参数、可输入输出的参数;

                函数的参数列表只有输入参数,并且有return <返回值类型,无长度说明>。

    返回值上:

        存储过程的返回值,可以有多个值,

               函数的返回值,只有一个值。

    调用方式上:

        存储过程的调用方式有:

    1)、exec <过程名>;

    2)、execute <过程名>;

    3)、在PL/SQL语句块中直接调用。

                函数的调用方式有:

          在PL/SQL语句块中直接调用。

                     具体分为:

      ----调用FUNCTION add_three_numbers

      ----1. 位置表示法调用函数

      BEGIN

      dbms_output.put_line(add_three_numbers(2,4,5));

      END;

      ----2. 命名表示法调用函数

      BEGIN

      dbms_output.put_line(add_three_numbers(b=>3, a=>4,c=>2));

      END;

      ----3. 混合使用位置表示法和命名表示法调用函数

      BEGIN

      dbms_output.put_line(add_three_numbers(3, b=>4,c=>2));

      END;

      ----4. 排除表示法

      BEGIN

      dbms_output.put_line(add_three_numbers(12,c=>2));

      END;

      ----5. sql调用表示法 --混合表示法

      SELECT add_three_numbers(3, b=>4,c=>2) FROM DUAL;

     

    ----1. 该函数接受3个可选参数,返回3个数字的和

      CREATE OR REPLACE FUNCTION add_three_numbers

      (

      a NUMBER:=0, b NUMBER:=0, c NUMBER:=0

      )

      RETURN NUMBER IS

      BEGIN

      RETURN a+b+c;

      END;

          

    存储过程:

    基本语法:

    create procedure <过程名>(<参数列表,无参时忽略>)

    as|is

    变量声明、初始化

    begin

    业务处理、逻辑代码

    exception

    异常捕获、容错处理

    end <过程名>;

    参数:<参数名> in|out|in out <参数类型,无长度说明> ,如:v_name varchar2

    in:入参

    out:出参

    in out:出入参

    注:as|is表示as或is

    调用语法:

    1)、exec <过程名>;

    2)、execute <过程名>;

    3)、在PL/SQL语句块中直接调用。

    例:

    create or replace procedure up_wap(v_param1 in out varchar2,v_param2 in out varchar2)

    is

    v_temp varchar2(20);

    begin

    dbms_output.put_line('交换前参数1:'||v_param1||' 参数2:'||v_param2);

    v_temp:=v_param1;

    v_param1:=v_param2;

    v_param2:=v_temp;

    dbms_output.put_line('交换后参数1:'||v_param1||' 参数2:'||v_param2);

    exception

    when others then dbms_output.put_line('There is a error when the procedure up_wap executing!');

    end up_wap;

    /

    -- 调用存储过程

    declare

    v_param1 varchar2(20):='param1';

    v_param2 varchar2(20):='param2';

    begin

    up_wap(v_param1 => v_param1,v_param2 => v_param2);

    end;

    /

     自定义函数(function)

    基本语法:

    create function <函数名>(<参数列表,无参时忽略>)

    return <返回值类型,无长度说明>

    as|is

    变量声明、初始化

    begin

    业务处理、逻辑代码

    return <返回的值>;

    exception

    异常捕获、容错处理

    end <函数名>;

    参数:in 入参

    注:只有入参的类型。

    在存储过程和自定义函数中的参数的传递(入参和出参)不能使用%type或%rowtype匹配,不能使用空值null,但是存储过程可以返回空值。

    例:

    create function uf_select_name_by_id_test(v_id in number)

    return varchar2

    is

    v_name t_test.t_name%type;

    begin

    select t_name into v_name from t_test where t_id=v_id;

    return v_name;

    exception

    when others then dbms_output.put_line('error');

    end uf_select_name_by_id_test;

    /

    select uf_select_name_by_id_test(1) 姓名 from dual;-- select调用

    declare --pl/sql语句块调用

    v_name varchar2(20);

    begin

    v_name:=uf_select_name_by_id_test(1);

    dbms_output.put_line('name = '||v_name);

    end;

    /

  • 相关阅读:
    OpenGL红宝书例子2.2 uniform变量的使用
    感冒了。。。
    OpenGL红宝书第一个例子:绘制两个三角形
    从今日起,我会把OpenGL红宝书上的例子用完整的代码形式写在我的博客中,
    win8.1下安装ubuntu 14.0 4LTS
    windows下编译Android版本的boost库文件
    cocos2d-x中使用tinyxml遇到的问题及解决
    为申请texturepacker用
    安装MSYS2过程遇到的问题及解决记录
    Lua 基础 -- 学习笔记
  • 原文地址:https://www.cnblogs.com/YangBinChina/p/2627912.html
Copyright © 2011-2022 走看看