函数一般用于计算和返回一个值,可以将经常需要使用的计算或功能写成一个函数。

语法

create [or replace] function func_name[(parameter1,[,parameter2]...)] return data_type is
[inner_variable]
begin
plsql_sentence;
[exception]
[dowith_sentences;]
end [func_name];

参数说明:

func_name:函数名称,如果数据库中已经存在此名称,则可以指定[or replace]关键字,这样新的函数将覆盖原来的函数

parameter1:函数的参数,这个时可选项,因为函数可以没有参数

data_type:函数的返回值类型,这个是必选项,在返回值类型的前面要使用return关键字来说明

inner_variable:函数的内部变量,它与函数的参数不一样

plsql_sentence:PL/SQL语句,它是函数主要功能的实现部分,函数的主体

dowith_sentences:异常处理代码

环境准备

现在数据库中存在如下表数据TMP002

日期 编号 姓名 工资
20171231 CST001 侯亮平 100000
20171231 CST002 陆亦可 12000
20180101 CST001 侯亮平 102000
20180101 CST002 陆亦可 13000
20180101 CST003 祁同伟 320000

数据准备脚本

create table TMP002
(
dtdate varchar2(10) not null,
cst_no varchar2(10)not null,
cst_name varchar2(100),
sal number,
constraint pk_tmp002 primary key(dtdate,cst_no)
);
insert into tmp002 values('','CST001','侯亮平','');
insert into tmp002 values('','CST002','陆亦可','');
insert into tmp002 values('','CST001','侯亮平','');
insert into tmp002 values('','CST002','陆亦可','');
insert into tmp002 values('','CST003','祁同伟','');
COMMIT;

案例

案例一:创建函数求出20180101这天的平均工资

create or replace function func_get_avg_sal(v_dt varchar2)
return number is
num_avg_sal number;
begin
select avg(sal) into num_avg_sal from tmp002 where dtdate=v_dt;
return(round(num_avg_sal,2));
exception
when no_data_found then
dbms_output.put_line('日期不存在!');
return(0);
end func_get_avg_sal;

调用函数

方法一:使用PL/SQL块

declare
avg_sal number;
begin
avg_sal:=func_get_avg_sal('');
dbms_output.put_line('平均工资为:'||avg_sal);
end;

调用结果:

方法二:借助dual表

select func_get_avg_sal('') avg_sal from dual;

【Oracle】函数的更多相关文章

  1. oracle函数,游标,视图使用总结0.000000000000000000001

    oracle函数或者叫存储过程,在实际的开发过程中对于复杂的业务需求是非常有用的,非常有效率的也是非常好玩儿的一个技术点. 平常在开发过程中对于CRUD功能较多.一般SQL即可应付,大不了就是长一点而 ...

  2. 【函数】Oracle函数系列(2)--数学函数及日期函数

    [函数]Oracle函数系列(2)--数学函数及日期函数 1  BLOG文档结构图 2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不 ...

  3. oracle函数listagg的使用说明(分组后连接字段)

    关于oracle函数listagg的使用说明 工作中经常遇到客户提出这样的需求,希望在汇总合并中,能够把日期逐个枚举出来. 如图,原始数据是这样的: 客户希望能够实现这样的汇总合并: 那么通常我会使用 ...

  4. 浅谈Oracle函数返回Table集合

    在调用Oracle函数时为了让PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合 ...

  5. oracle学习笔记(三)oracle函数

    --oracle 函数 --lower(char):将字符串转换为小写格式 --upper(char):将字符串转换为大写格式 --length(char):返回字符串的长度 --substr(cha ...

  6. oracle函数和存储过程有什么区别

    oracle函数和存储过程有什么区别 1. 返回值的区别,函数有1个返回值,而存储过程是通过参数返回的,可以有多个或者没有 2.调用的区别,函数可以在查询语句中直接调用,而存储过程必须单独调用. 函数 ...

  7. Oracle函数sys_connect_by_path 详解

    Oracle函数sys_connect_by_path 详解 语法:Oracle函数:sys_connect_by_path 主要用于树查询(层次查询) 以及 多列转行.其语法一般为:       s ...

  8. 汉字转拼音的Oracle函数

    前言: 最近处理一个特殊的问题,需要用到汉字自动转换拼音的功能. 解决: 在这里找了不少资料,都是有所缺陷,而且也好像很绕.其实是一个很简单的东东.后来还是自己写了一个函数获取.分享出来,给有需要的X ...

  9. oracle函数操作

    感于总有些网友提出一些非常基础的问题,比如有没有实现某某功能的函数啊,某某函数是做什么用的啊,格式是什么等等,同时也感受到自己对oracle函数认识的不足,于是集中月余时间专注于oracle函数,小有 ...

  10. oracle函数,游标,视图使用总结

    oracle函数或者叫存储过程,在实际的开发过程中对于复杂的业务需求是非常有用的,非常有效率的也是非常好玩儿的一个技术点. 平常在开发过程中对于CRUD功能较多.一般SQL即可应付,大不了就是长一点而 ...

随机推荐

  1. 具体解释Ajax技术

    Ajax 可以做什么? 现在 Google Suggest 和 Google Maps 使用了 Ajax,通过 Ajax,我们能够使得client得到丰富的应用体验及交换操作,而用户不会感觉到有网页提 ...

  2. Matlab的linprog解决简单线性规划问题

    一个简单的线性规划问题,使用Matlab的linprog解决 假定有n种煤,各种煤的配比为x1,x2,x3,……首先需要满足下列两个约束条件,即 x1+x2+x3……+xn=1 x1≥0, x2≥0, ...

  3. NGUI 3.5教程(一)安装NGUI 3.5.8

    写在前面: 网上找的NGUI教程,都是基于2.x版本号的.为了能配合教程学着做,我也是下载了各种NGUI 2.x版本号.可是在导入的时候,或多或少都报错(我用的Unity 的版本号是4.3.2).无奈 ...

  4. Myeclipse设置快捷键

    快捷键中把我们习惯性使用的Alt+/进行代码自动补齐的快捷键改为了ctrl+空格,大家知道这是切换中英文输入法的键,所以需要更改这个快捷键, 1.选择MyEclipse6.0菜单栏中的Window-& ...

  5. Apache2.2.16+PHP5.3.3+MySQL5.1.49的配置方法

    第一步:下载安装的文件 1. MySQL:下载地址mysql-5.1.49-win32.msi: 2. Apache: 下载地址httpd-2.2.16-win32-x86-openssl-0.9.8 ...

  6. 深入分析JavaWeb Item7 -- HttpServletResponse详解

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象即然代表请求和响应,那我们要 ...

  7. 【BZOJ】【3053】The Closest M Points

    KD-Tree 题目大意:K维空间内,与给定点欧几里得距离最近的 m 个点. KD树啊……还能怎样啊……然而扩展到k维其实并没多么复杂?除了我已经脑补不出建树过程……不过代码好像变化不大>_&g ...

  8. 我所遭遇过的游戏中间件--FlashOcx

    使用Flash做游戏界面的另一种方式是通过Abode提供flash.ocx处理Flash界面.将Flash图像通过GDI绘制出来后,再将图像数据拷贝到一个D3D的纹理结构中,最后由引擎的D3D接口进行 ...

  9. 我们为什么以及是如何从 Angular.js 迁移到 Vue.js?

    在我写这篇文章的时候,我们刚刚从我们的应用程序代码库中删除了最后一行AngularJS代码,结束了一个为期4个月的非侵入性工作,将我们的应用程序从AngularJS迁移到VueJS.在这篇文章中,我将 ...

  10. C/C++ 语言获取文件大小

    在C语言中测试文件的大小,主要使用二个标准函数. 1.fseek 函数原型:int fseek ( FILE * stream, long int offset, int origin ); 参数说明 ...