`

PLSQL开发笔记和小结(5)——Oracle存储过程和函数(转载)

 
阅读更多

*****************************************

Oracle存储过程

*****************************************

在谈存储过程书写中的一些规则时,先看一下执行它的规则,在命令窗口执行存储过程say_hello

     var v_msg_result varchar2(30);

     exec say_hello('zhangsan', :v_msg_result); --execute

    

     declare

        v_msg_result varchar2(30);

     begin

        say_hello('zhangsan', v_msg_result);

        dbms_output.put_line(v_msg_result);

     end;

存储过程入参,不论类型,缺省情况下值都为null,入参和出参不能有长度,其中关键字as可以替换成is,存储过程中变量声明在asbegin之间,同时,存储过程中可以再调用其它的存储过程,如果要保证存储过程之间的事务处理不受影响,可以定义为自治事务。

     create or replace procedure say_hello(v_name in varchar2,v_flag number,o_ret out number)

     as

     begin

       if v_name is null and v_flag is null then --v_namev_flag都等于null

           o_ret := 10;

       else

           o_ret := 100;

       end if;

     end;

对于入参为null情况下给予缺省值

     create or replace procedure say_hello(i_name in varchar2,i_flag number,o_ret out number)

     as

       v_name  varchar2(100);

     begin

       if i_name is null then

          v_name := '0';

       else

          v_name := i_name;

       end if;

       insert into phone(..,wname..,) values(..,v_name,..);

     end;

或直接在insert语句中调用nvl函数赋缺省值

     insert into phone(..,wname..,) values(..,nvl(v_name,' '),..); --如果将' '写成'',insert进来的v_name值还是为''等价于null

带一个参数的存储过程

   输入参数in,输入参数不能进行:=赋值,但可以将它赋给as后面定义的变量;

   输入参数in,可以作为变量进行条件判断;

   默认不写就是in

   存储过程没有重载,这个新建的say_hello会替代已经存在的say_hello

     create or replace procedure say_hello(v_name in varchar2)

     as

     begin

        --v_name:='a'; --存储过程入参v_name不能做为赋值目标

        dbms_output.put_line(v_name);

     end;

存储过程输入参数作为变量进行条件判断

     create or replace procedure say_hello(i_opFlag in number)

     as

        v_name varchar2(100);

     begin

        if i_opFlag = 1 then

           v_name :='0';

        else

           v_name :='haha';

        end if;

        dbms_output.put_line(v_name);

     end;

利用存储过程中定义的变量对入参的空值处理:

     create or replace procedure say_hello(i_name in varchar2)

     as

        v_name varchar2(100);

     begin

        if i_name is null then

           v_name :='0';

        else

           v_name :=i_name;--将入参赋值给定义变量

        end if;

        dbms_output.put_line(v_name);

     end;

out输出参数,用于利用存储过程给一个或多个变量赋值,类似于返回值

     create or replace procedure say_hello(v_name in varchar2,v_content out varchar2)

     as

begin

        v_content:='hello '||v_name;

     end;

     调用:

     Declare

v_in varchar2(20):='wang';

        v_con varchar2(30);

     begin

        say_hello(v_in,v_con);

        dbms_output.put_line(v_con);

     end;

in out参数,既赋值又取值

     create or replace procedure say_hello(v_name in out varchar2)

     as

     begin

        v_name:='hello '||v_name;

     end;

     调用:

     declare

        v_inout varchar2(20):='wangsu';

     begin

        say_hello(v_inout);

        dbms_output.put_line(v_inout);

     end;

对存储过程入参赋缺省值

     create or replace procedure say_hello(v_name varchar2 default 'susu', v_content varchar2 default 'hello')

     as

     begin

        dbms_output.put_line(v_name||' '||v_content);

     end;

     调用:(用指明形参名的方式调用更好)

     begin

        say_hello();

     end;

    

     begin

        say_hello('cheng');

     end;

    

     begin

        say_hello(v_name=>'cheng');

     end;

*****************************************

 PLSQL中的函数

*****************************************

functionprocedure的区别:

1、函数有返回值,过程没有。

2、函数调用在一个表达式中,过程则是作为pl/sql程序的一个语句。

过程和函数都以编译后的形式存放在数据库中,函数可以有零个或多个参数并有一个返回值。过程可以有零个或多个参数但没有返回值。函数和过程都可以通过参数列表接收或返回零个或多个值,函数和过程的主要区别不在于返回值,而在于他们的调用方式,函数以合法表达式的方式调用,过程是作为一个独立执行语句调用的。

    create or replace function func(v_name in varchar2)

    return varchar2

    is     --也可以用as

    begin

       return (v_name||' hello');

    end;

    调用:

    declare

       v_name varchar2(20);

    begin

       v_name:=func('cheng');

       dbms_output.put_line(v_name);

    end;

out参数的函数

    create or replace function func(v_name in varchar2,v_content out varchar2)

    return varchar2

    is

    begin

       v_content:=v_name||' hello';

       return v_content;

    end;

    调用:

    declare

       v_name varchar2(20);

       v_name1 varchar2(20);

    begin

       v_name1:=func('susu',v_name);--返回v_name

       dbms_output.put_line(v_name1);--打印func结果

       dbms_output.put_line(v_name);--打印v_name结果

    end;

in out 参数的函数

    create or replace function func(v_name in out varchar2)

    return varchar2

    is

    begin

       v_name:=v_name||' hello';

       return v_name;

    end;

    调用:

    declare

       v_inout varchar2(20):='world';

       v_ret varchar2(20);

    begin

       v_ret:=func(v_inout);--返回调用v_inout(作为出参)

       dbms_output.put_line(v_ret);--打印func结果

       dbms_output.put_line(v_inout);--返回v_name结果

    end;  

 

转载自:http://www.blogjava.net/cheneyfree/archive/2008/07/19/216090.html 

分享到:
评论

相关推荐

    转:PLSQL开发笔记和小结

    这篇"PLSQL开发笔记和小结"可能涵盖了许多关于PLSQL的基础知识和高级技巧,虽然具体的内容无法在此提供,但我们可以根据常规的PLSQL学习路线来探讨一些关键知识点: 1. **基本语法**:PLSQL由声明部分、执行部分和...

    练习利用PLSQL Developer编写和管理存储过程、存储函数和触发器等

    PLSQL Developer是一种功能强大的Oracle数据库开发工具,提供了许多功能来帮助开发者快速编写和管理存储过程、存储函数和触发器等高级数据库对象。本文将详细介绍如何使用PLSQL Developer编写和管理存储过程、存储...

    oracle存储过程和函数PPT

    综合这三个主题,Oracle数据库开发者可以通过学习和熟练运用存储过程、函数和PL/SQL,提升数据库应用程序的性能和可维护性。了解并掌握游标管理,可以帮助开发者更加高效地处理大数据量的情况。这些知识对于任何涉及...

    oracle函数调用存储过程

    - **参数传递**:确保函数和存储过程之间的参数正确匹配。 - **错误处理**:考虑添加异常处理逻辑,以便更好地管理可能发生的错误情况。 - **性能优化**:合理设计存储过程和函数,减少不必要的数据传输和计算开销。...

    Oracle PlSql 存储过程

    Oracle PlSql 存储过程是 Oracle 数据库中的一种编程语言,用于实现复杂的业务逻辑和数据处理。下面是对 Oracle PlSql 存储过程的详细介绍: 一、 Oracle 存储过程目录 Oracle 存储过程目录是指 Oracle 数据库中...

    ORACLE 常用分析函数

    PLSQL开发笔记和小结;分析函数简述  ROW_NUMBER () OVER([partition_clause] order_by_clause) dense_rank在做排序时如果遇到列有重复值,则重复值所在行的序列值相同,而其后的序列值依旧递增,rank则是重复值...

    plsql开发小结

    PLSQL,全称为Procedural Language/SQL,是Oracle数据库提供的一个编程语言,它结合了SQL的查询功能和过程性编程语言的特点,用于编写数据库应用程序。在Oracle数据库提高和开发中,掌握PLSQL是非常重要的。以下是...

    oracle 数据库 plsql 存储过程

    通过上述介绍,我们可以看到Oracle存储过程不仅能够提高应用程序的性能和安全性,还能大大简化开发工作。在实际应用中,根据不同的需求选择合适的存储过程设计模式,可以使系统更加健壮和高效。

    plsql创建存储过程并创建job定时任务执行-详细笔记文档总结

    plsql创建存储过程并创建job定时任务执行详细笔记文档总结 在 Oracle 中,plsql 是一种强大的编程语言,可以用来创建存储过程和定时任务执行。在本文中,我们将详细介绍如何使用 plsql 创建存储过程并创建 job 定时...

    oracle plsql编程学习笔记

    **包**是PL/SQL中的高级特性,用于组织和封装过程、函数和变量,提供命名空间管理和安全性控制。`FUN_PACKAGE`包包含了`UPDATE_SAL`过程和`ANNUAL_INCOME`函数,实现了更新员工薪资和计算员工年度总收入的功能。 ##...

    转帖--oracle分析函数+PLSQL小结

    Oracle分析函数是数据库查询中的一个强大工具,它们在处理...通过熟练掌握Oracle分析函数和PL/SQL,数据库管理员和开发人员能够更高效地管理和操作数据库,实现更复杂的数据分析任务,同时提高应用程序的性能和灵活性。

    Oracle PL SQL存储过程以及函数编

    Oracle PL/SQL是Oracle数据库系统中的一个强大工具,它结合了SQL的数据操作能力和...对于初学者,可以参考《Oracle PLSQL存储过程以及函数编写.pdf》和《本地规范实例详解.pdf》等资料,结合实际练习来巩固理论知识。

    oracle总结,PLSQL单行函数和组函数详解

    总的来说,理解并熟练运用Oracle的单行函数和组函数对于数据库管理和开发至关重要。通过这些函数,我们可以更有效地处理数据,创建复杂的查询,优化性能,以及构建复杂的业务逻辑。不断学习和实践,将有助于提高你在...

    Oracle_PLSQL_存储过程

    5. **Java调用Oracle存储过程:** - **无返回值的存储过程:** - 使用`CallableStatement`设置输入参数并执行。 - **有返回值的存储过程:** - 可以通过注册输出参数来获取返回值。 - **返回列表:** - 使用...

    PLSQL12 绿色免安装 ORACLE

    使用PLSQL Developer,用户可以轻松创建、修改和删除数据库表、视图、存储过程、函数等对象,同时支持数据的导入导出,数据库备份和恢复。它的查询分析器可以帮助我们快速定位和解决性能问题,而其内置的调试器则...

    基于oracle数据库的PLSQL编程以及存储过程的创建和使用资料.zip

    本资料主要关注PLSQL编程以及在Oracle中创建和使用存储过程。 PL/SQL是Oracle特有的编程语言,它扩展了SQL的功能,允许开发者编写复杂的业务逻辑和控制流程。在PL/SQL中,你可以声明变量、定义过程和函数、处理异常...

    PLSQL学习笔记(1-7)

    - **包的概念**:包是一种组织PLSQL对象的方式,包含公共和私有部分,可以封装过程、函数和其他实体。 - **包规范**:定义包的接口,即对外可见的部分。 - **包体**:实现包的具体逻辑,包括过程和函数的定义。 ...

    Oracle经典教程5——PLSQL程序设计

    ### Oracle经典教程5——PLSQL程序设计:深入解读与应用 #### 一、PL/SQL:Oracle的强大武器 ##### 1.1 PL/SQL简介 PL/SQL(Procedural Language for SQL)是Oracle数据库特有的过程化编程语言,它将SQL的强大力量...

    PLSQL developer 和 oracle 客户端

    在32位操作系统环境下,我们通常会搭配使用PLSQL Developer和Oracle客户端来完成对数据库的管理和开发工作。 PLSQL Developer是由Allround Automations公司开发的一款集成开发环境(IDE),主要用于编写、调试、...

    oracle函数大全与存储过程语法-中文.rar

    Oracle数据库是世界上最广泛使用的数据库系统之一,其强大的功能和灵活性主要体现在它的函数和存储过程上。本资源包“oracle函数大全与存储过程语法-中文.rar”涵盖了从Oracle 9i到10G版本的函数和存储过程的详细...

Global site tag (gtag.js) - Google Analytics