一、函数
函数参数包括三种类型:输入参数、输出参数、输入输出参数;
说明:函数必须包含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 过程已成功完成。
分享到:
相关推荐
6. **子程序**:PL/SQL支持函数和过程的定义,这些子程序可以在多个地方重复使用,降低了代码的冗余。 7. **包(Packages)**:包是将相关的类型、变量、常量、过程和函数组合在一起的命名实体,便于管理和重用。 ...
PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种过程化语言,专为数据库操作设计。这个"PL/SQL最新中文手册"显然是一份详细解释PL/SQL 7.0版本的指南,对于学习和精通Oracle数据库编程至关重要。以下是手册...
PL/SQL是Oracle特有的SQL扩展,它结合了SQL的查询和数据操作能力与过程性编程语言的功能。 1. **PL/SQL基本概念** - **块结构**:PL/SQL代码由声明、执行和异常处理三部分组成,包括BEGIN...END块、DECLARE......
PL/SQL 的函数与存储过程练习 PL/SQL 的函数与存储过程练习
Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计特性,是Oracle数据库系统中用于创建存储过程、函数、触发器和包的主要工具。在这个"Oracle PL/SQL实战(待续)"的主题中,我们将深入...
它结合了SQL的查询能力与过程化编程元素,使得开发者能够创建复杂的业务逻辑和数据库应用程序。PL/SQL Developer 11.0作为一套强大的集成开发环境(IDE),提供了许多有助于提升PL/SQL开发效率的工具和功能。 1. **...
**标题与描述**:本文档围绕“Oracle 9i PL/SQL程序设计笔记”这一核心主题,深入探讨了PL/SQL语言的基础知识及其在Oracle 9i数据库环境中的应用。 **关键词**:Oracle 9i、PL/SQL #### PL/SQL程序结构详解 **2.1...
PL/SQL是Oracle数据库系统中的一个关键组件,全称为Procedural Language/Structured Query Language,是一种结合了SQL和过程编程语言的工具,主要用于编写数据库应用程序。64位的PL/SQL开发者工具对于那些处理大数据...
例如,在`jbpm.sql`文件中,可能包含了与业务流程管理(BPM)相关的PL/SQL存储过程或函数,用于定义和执行工作流任务。 此外,PL/SQL还支持块的概念,如匿名块,这使得在不创建独立的存储过程或函数的情况下,也能...
这个过程的关键在于理解如何将静态的HTML模板与动态的PL/SQL数据结合起来,以生成可交互的Web报表。这种报表可以直接复制到Excel中进行进一步编辑和分析,非常适合需要快速查看和处理大量数据的场景。同时,由于PL/...
### 常用的PL/SQL函数 #### 引言 在Oracle数据库中,PL/SQL(Procedural Language for SQL)是一种强大的编程语言,它允许开发者编写过程化的SQL代码来处理复杂的数据操作任务。本文将详细介绍Oracle数据库中常用的...
2. **存储过程和函数**:这些是PL/SQL的核心组成部分,它们封装了一系列操作,可以被多次调用,提高代码复用性。书中可能包含各种示例,如自定义计算函数、处理业务逻辑的存储过程等。 3. **触发器**:当数据库中的...
免安装的绿色版PL/SQL Developer使得用户无需经历复杂的安装过程,只需解压即可使用,大大简化了软件部署,方便在不同的计算机环境间快速切换。 这款绿色版PL/SQL Developer包含了所有必要的组件和配置文件,确保...
- **新特性概述**:介绍Oracle 11g中引入的与PL/SQL相关的新增功能,例如新的数据类型、函数、性能优化技术等。 - **性能提升技术**:提供了一些具体的例子和最佳实践,展示了如何利用Oracle 11g的新特性来进一步...
PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种结合了SQL语言与过程编程的语言,专为数据库管理和应用程序开发设计。PL/SQL全称为“Procedural Language/Structured Query Language”,它提供了丰富的控制...
触发器的管理和维护,以及其与过程的比较也是这一章节的重要内容。 过程是PL/SQL中一种用来封装逻辑的单元,它包含了一系列的SQL语句和PL/SQL代码,可以执行特定的任务。过程与匿名程序块的区别在于它具有名称和...
Oracle PL/SQL是一种...书中可能包含各种类型的PL/SQL程序设计技巧,从简单的存储过程和函数到复杂的事务处理和并发控制策略。通过实例学习,你将能够更好地理解和运用这些概念,提升你在Oracle数据库开发中的技能。
PL/SQL(Procedural Language for SQL)是一种过程化语言,它结合了SQL的数据操纵功能和过程化语言的控制结构,使用户能够灵活地控制数据操作流程。作为Oracle数据库的核心组成部分之一,PL/SQL在数据库应用程序开发...
3. PL/SQL程序单元包括过程(Procedures)、函数(Functions)、包(Packages)、触发器(Triggers)等。文档中特别提到了“创建过程”的过程和方法,例如使用SQL的CREATE OR REPLACE语句。 4. PL/SQL结构命名惯例...
PL/SQL是Oracle数据库特有的编程语言,它结合了SQL的查询能力与过程式编程语言的功能,使得数据库管理、数据处理和业务逻辑实现更为高效。本书针对那些希望提升PL/SQL编程技能,设计和开发复杂数据库解决方案的...