`
xiangxuehai_jiaer
  • 浏览: 91712 次
  • 性别: Icon_minigender_2
  • 来自: 西安
社区版块
存档分类
最新评论

PL/SQL函数与过程

 
阅读更多

一、函数

  函数参数包括三种类型:输入参数、输出参数、输入输出参数;

  说明:函数必须包含return语句。

                 当定义参数函数时,只指定数据类型,不能指定长度。

1、无参函数

创建:

SQL> create or replace function cur_datetime

  2  return varchar2

  3  is

  4  begin

  5    return to_char(sysdate,'yyyy-mm-dd');

  6  end;

  7  /

调用:

SQL> begin

  2    dbms_output.put_line(cur_datetime);

  3  end;

  4  /

2012-03-14

 

PL/SQL 过程已成功完成。

2、带有输入参数的函数(缺省是in

创建:

SQL> create or replace function get_sal(name varchar2)

  2  return number

  3  as

  4    v_sal empl.sal%type;

  5  begin

  6    select sal into v_sal from empl where upper(ename)=upper(name);

  7    return v_sal;

  8  end;

  9  /

调用:

SQL> begin

  2    dbms_output.put_line('工资'||get_sal('&name'));

  3  end;

  4  /

输入 name 的值:  jack

原值    2:   dbms_output.put_line('工资'||get_sal('&name'));

新值    2:   dbms_output.put_line('工资'||get_sal('jack'));

工资0

 

PL/SQL 过程已成功完成。

或者:

SQL> select get_sal('&name') 工资 from dual;

输入 name 的值:  jack

原值    1: select get_sal('&name') 工资 from dual

新值    1: select get_sal('jack') 工资 from dual

 

      工资

----------

       400

 

3、带有输出参数的函数

创建:

SQL> create or replace function get_info(no number,title out varchar2)

  2  return varchar2

  3  as

  4    name empl.ename%type;

  5  begin

  6    select ename,dept into name,title from empl

  7      where eno=no;

  8    return name;

  9  end;

 10  /

 

函数已创建。

调用:

SQL> declare

  2    v_name empl.ename%type;

  3    v_dept empl.dept%type;

  4  begin

  5    v_name:=get_info(&eno,v_dept);

  6    dbms_output.put_line('姓名:'||v_name||',部门'||v_dept);

  7  end;

  8  /

输入 eno 的值:  1001

原值    5:   v_name:=get_info(&eno,v_dept);

新值    5:   v_name:=get_info(1001,v_dept);

姓名:jack,部门sa

 

PL/SQL 过程已成功完成。

4、带有输入输出参数的函数

创建:

SQL> create or replace function get_upd_info

  2  (no number,sal_chg in out number)

  3  return varchar2

  4  as

  5    name empl.ename%type;

  6  begin

  7    update empl set sal=sal+sal_chg where eno=no

  8  returning ename,sal into name,sal_chg;

  9  return name;

 10  end;

 11  /

 

函数已创建。

调用:

SQL> declare

  2    v_eno empl.eno%type;

  3    v_name empl.ename%type;

  4    v_salchg empl.sal%type;

  5  begin

  6    v_eno:=&eno;

  7    v_salchg:=&incre;

  8    v_name:=get_upd_info(v_eno,v_salchg);

  9    dbms_output.put_line('姓名:'||v_name||'新工资'||v_salchg);

 10  end;

 11  /

输入 eno 的值:  1001

原值    6:   v_eno:=&eno;

新值    6:   v_eno:=1001;

输入 incre 的值:  400

原值    7:   v_salchg:=&incre;

新值    7:   v_salchg:=400;

姓名:jack新工资400

 

PL/SQL 过程已成功完成。

二、过程

 过程参数包括三种类型:输入参数、输出参数、输入输出参数。

1、建立无参的过程

创建:

SQL> create or replace procedure out_time

  2  is

  3    begin

  4      dbms_output.put_line(sysdate);

  5    end;

  6  /

 

过程已创建。

调用:

SQL> exec out_time

14-3 -12

 

PL/SQL 过程已成功完成。

2、带有输入参数的过程

创建:

SQL> create or replace procedure add_emp(

  2    v_eno empl.eno%type,

  3    v_ename empl.ename%type,

  4    v_dept empl.dept%type,

  5    v_sal empl.sal%type)

  6  is

  7  begin

  8    insert into empl values(v_eno,v_ename,v_dept,v_sal);

  9  end;

 10  /

 

过程已创建。

调用:

SQL> exec add_emp('1011','ella','sa',6000);

 

PL/SQL 过程已成功完成。

3、带有输出参数的过程

创建:

SQL> create or replace procedure update_sal(

  2    no number,

  3    salary number,

  4    name out varchar2)

  5  is

  6  begin

  7    update empl set sal=salary where eno=no returning ename into name;

  8  end;

  9  /

 

过程已创建。

调用:

SQL> declare

  2    v_ename empl.ename%type;

  3  begin

  4    update_sal(&eno,&salary,v_ename);

  5    dbms_output.put_line('姓名:'||v_ename);

  6  end;

  7  /

输入 eno 的值:  1001

输入 salary 的值:  3000

原值    4:   update_sal(&eno,&salary,v_ename);

新值    4:   update_sal(1001,3000,v_ename);

姓名:jack

 

PL/SQL 过程已成功完成。

4、带有输入输出参数的过程

创建:

SQL> create or replace procedure divide(num1 in out number,num2 in out number)

  2  is

  3    v1 number;

  4    v2 number;

  5  begin

  6    v1:=trunc(num1/num2);

  7    v2:=mod(num1,num2);

  8    num1:=v1;

  9    num2:=v2;

 10  end;

 11  /

 

过程已创建。

调用:

SQL> declare

  2    n1 number:=&n1;

  3    n2 number:=&n2;

  4  begin

  5    divide(n1,n2);

  6    dbms_output.put_line('商:'||n1||'余数'||n2);

  7  end;

  8  /

输入 n1 的值:  3

原值    2:   n1 number:=&n1;

新值    2:   n1 number:=3;

输入 n2 的值:  4

原值    3:   n2 number:=&n2;

新值    3:   n2 number:=4;

商:0余数3

 

PL/SQL 过程已成功完成。

分享到:
评论

相关推荐

    一个对数据库的操作工具PL/SQLpl/sqL工具

    6. **子程序**:PL/SQL支持函数和过程的定义,这些子程序可以在多个地方重复使用,降低了代码的冗余。 7. **包(Packages)**:包是将相关的类型、变量、常量、过程和函数组合在一起的命名实体,便于管理和重用。 ...

    pl/sql最新中文手册

    PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种过程化语言,专为数据库操作设计。这个"PL/SQL最新中文手册"显然是一份详细解释PL/SQL 7.0版本的指南,对于学习和精通Oracle数据库编程至关重要。以下是手册...

    oracle10g_pl/sql

    PL/SQL是Oracle特有的SQL扩展,它结合了SQL的查询和数据操作能力与过程性编程语言的功能。 1. **PL/SQL基本概念** - **块结构**:PL/SQL代码由声明、执行和异常处理三部分组成,包括BEGIN...END块、DECLARE......

    PL/SQL 的函数与存储过程练习

    PL/SQL 的函数与存储过程练习 PL/SQL 的函数与存储过程练习

    Oracle PL/SQL实战(待续)

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计特性,是Oracle数据库系统中用于创建存储过程、函数、触发器和包的主要工具。在这个"Oracle PL/SQL实战(待续)"的主题中,我们将深入...

    pl/sql developer11.0

    它结合了SQL的查询能力与过程化编程元素,使得开发者能够创建复杂的业务逻辑和数据库应用程序。PL/SQL Developer 11.0作为一套强大的集成开发环境(IDE),提供了许多有助于提升PL/SQL开发效率的工具和功能。 1. **...

    oracle 9i pl/sql程序设计笔记

    **标题与描述**:本文档围绕“Oracle 9i PL/SQL程序设计笔记”这一核心主题,深入探讨了PL/SQL语言的基础知识及其在Oracle 9i数据库环境中的应用。 **关键词**:Oracle 9i、PL/SQL #### PL/SQL程序结构详解 **2.1...

    pl/sql64位

    PL/SQL是Oracle数据库系统中的一个关键组件,全称为Procedural Language/Structured Query Language,是一种结合了SQL和过程编程语言的工具,主要用于编写数据库应用程序。64位的PL/SQL开发者工具对于那些处理大数据...

    PL/SQL 基本知识

    例如,在`jbpm.sql`文件中,可能包含了与业务流程管理(BPM)相关的PL/SQL存储过程或函数,用于定义和执行工作流任务。 此外,PL/SQL还支持块的概念,如匿名块,这使得在不创建独立的存储过程或函数的情况下,也能...

    Web pl/sql报表制作过程

    这个过程的关键在于理解如何将静态的HTML模板与动态的PL/SQL数据结合起来,以生成可交互的Web报表。这种报表可以直接复制到Excel中进行进一步编辑和分析,非常适合需要快速查看和处理大量数据的场景。同时,由于PL/...

    常用的PL/SQL函数

    ### 常用的PL/SQL函数 #### 引言 在Oracle数据库中,PL/SQL(Procedural Language for SQL)是一种强大的编程语言,它允许开发者编写过程化的SQL代码来处理复杂的数据操作任务。本文将详细介绍Oracle数据库中常用的...

    oracle pl/sql从入门到精通 配套源代码

    2. **存储过程和函数**:这些是PL/SQL的核心组成部分,它们封装了一系列操作,可以被多次调用,提高代码复用性。书中可能包含各种示例,如自定义计算函数、处理业务逻辑的存储过程等。 3. **触发器**:当数据库中的...

    pl/sql 免安装,绿色版pl/sql

    免安装的绿色版PL/SQL Developer使得用户无需经历复杂的安装过程,只需解压即可使用,大大简化了软件部署,方便在不同的计算机环境间快速切换。 这款绿色版PL/SQL Developer包含了所有必要的组件和配置文件,确保...

    Oracle PL/SQL程序设计(第5版)(上下册)

    - **新特性概述**:介绍Oracle 11g中引入的与PL/SQL相关的新增功能,例如新的数据类型、函数、性能优化技术等。 - **性能提升技术**:提供了一些具体的例子和最佳实践,展示了如何利用Oracle 11g的新特性来进一步...

    PL/SQL下载

    PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种结合了SQL语言与过程编程的语言,专为数据库管理和应用程序开发设计。PL/SQL全称为“Procedural Language/Structured Query Language”,它提供了丰富的控制...

    ORACLE PL/SQL从入门到精通

    触发器的管理和维护,以及其与过程的比较也是这一章节的重要内容。 过程是PL/SQL中一种用来封装逻辑的单元,它包含了一系列的SQL语句和PL/SQL代码,可以执行特定的任务。过程与匿名程序块的区别在于它具有名称和...

    Oracle PL/SQL实例编程(PL/SQL经典书籍)

    Oracle PL/SQL是一种...书中可能包含各种类型的PL/SQL程序设计技巧,从简单的存储过程和函数到复杂的事务处理和并发控制策略。通过实例学习,你将能够更好地理解和运用这些概念,提升你在Oracle数据库开发中的技能。

    PL/SQL编程基础知识

    PL/SQL(Procedural Language for SQL)是一种过程化语言,它结合了SQL的数据操纵功能和过程化语言的控制结构,使用户能够灵活地控制数据操作流程。作为Oracle数据库的核心组成部分之一,PL/SQL在数据库应用程序开发...

    PL/SQL开发文档1

    3. PL/SQL程序单元包括过程(Procedures)、函数(Functions)、包(Packages)、触发器(Triggers)等。文档中特别提到了“创建过程”的过程和方法,例如使用SQL的CREATE OR REPLACE语句。 4. PL/SQL结构命名惯例...

    Oracle PL/SQL专家指南-高级PL/SQL解决方案的设计与开发

    PL/SQL是Oracle数据库特有的编程语言,它结合了SQL的查询能力与过程式编程语言的功能,使得数据库管理、数据处理和业务逻辑实现更为高效。本书针对那些希望提升PL/SQL编程技能,设计和开发复杂数据库解决方案的...

Global site tag (gtag.js) - Google Analytics