文档章节

oracle自定义函数语法及使用

卢瑶
 卢瑶
发布于 2016/06/17 12:02
字数 501
阅读 151
收藏 0

1、自定义函数语法


create [or replace] function  函数名                         -- 定义一个名为xxx的函数

(
       parameterName1, mode1 dataType1,
       parameterName2, mode2 dataType2,
       ...
 )
return  返回值类型                                              --表示函数的返回类型为char或number等类型
is                                                                          -- 表示函数体部分,关键字用is或as都可以
声明部分;
begin                                                                    -- 表示函数开始
函数体;
return 变量;                                                          -- 表示函数返回值
end ;                                                                    -- 表示函数结束

参数含义:

参数 含义 参数值含义

parameterName1

表示参数名称    
dataType 表示参数的数据类型 char、NUMBER、nvarchar2.....  
mode1、mode2 表示参数类型 in、out、in out

1、IN模式:只读。在模块里面,实参的数值只能被引用,而这个参数不能被改变。
2、OUT模式:只写。模块能够给这个参数进行赋值,但是这个参数的数值不能被引用。
3、IN OUT模式:可读写。这个模块的数值在模块内可被引用或改变。

2、自定义函数使用

select 自定义函数名(参数) from 表名;

3、示例

示例1:
create or replace function explainParameter
(
    inParam in char,    
    outParam out char, 
    inAndOutParam in out char   
)
return char    
as     
    returnChar char;   
    num   number:=0;  
begin
    inParam := 'Hello World';   -- 这是错误的,in类型的参数只能用来传值,不能赋值
    outParam := 'Hello World'; -- 这是正确的,out类型的参数可以用来被赋值
    inAndOutParam := 'Hello World'; -- 这是正确的,in out参数既可以用来传值,又可以被赋值
   inAndOutParam := outParam; -- 这是错误的,out参数不能用来传值
return   returnChar; 
end

调用:select explainParameter ('a','b','c')  from dual;

 

示例二:根据表名查询该表最大主键值,vseq序列表存其他业务表refcode主键最大值。

create or replace

function f_getMaxRefcode(tableName in vnarchar2) 

return number

is

nextval number;

num number:=0;

begin 

select count(*) into num from ( select refcode from vseq where tablename=tableName );

if(num>1) then

update vseq set maxrefcode=maxrefcode+1 where tablename=tableName;

commit;

end if;

if(num=0) then

insert into vseq(tablename,maxrefcode) values(tableName,1);

commit;

end if;

select maxrefcode into nextval from vseq where tablename=tableName;

return nextval;

end;

© 著作权归作者所有

共有 人打赏支持
卢瑶
粉丝 13
博文 114
码字总数 44827
作品 0
徐汇
程序员
加载中

评论(1)

卢瑶
卢瑶
7
PostgreSQL Oracle 兼容性之 - 自定义并行聚合函数 PARALLEL_ENABLE AGGREGATE

标签 PostgreSQL , Oracle , 自定义聚合 , 并行 背景 Oracle,PostgreSQL均支持自定义聚合函数,例如PostgreSQL自定义聚合函数的语法如下: Oracle的语法与之有所不同,并且支持并行。 Post...

德哥
04/18
0
0
PostgreSQL Oracle PL/SQL 兼容性之 - AGGREGATE USING Clause 聚合函数

标签 PostgreSQL , Oracle , PL/SQL , 聚合函数 , 自定义聚合函数 背景 Oracle的自定义聚合函数的定义方法,在创建函数是,使用AGGREGATE USING Clause关键词。 AGGREGATE USING Clause Spe...

德哥
06/21
0
0
Oracle自定义函数与存储过程

一、Oracle自定义函数 1、语法 2、示例1 3、示例2 4、示例3 二、Oracle存储过程 1、语法 2、示例 三、自定义函数与存储过程 1、函数和存储过程的优点 2、函数和存储过程的区别 3、适用场合 ...

HarleyZhuge
2017/11/22
5
0
MyBatis之动态SQL语句

有些时候,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空,此时查询出的结果很可能是空的,也许我们需要参数为空时,是查出全部的信息。使用Oracle的序列、...

晨曦之光
2012/04/25
17.3K
0
Mysql /Oralce 50个区别

   1. 有些人说Oracle没有限制,实际上他们说得可能是Oracle不支持LIMIT语法.不过可以rownum虚列来实现,不过会更加麻烦.   2. Oracle不支持偏移(offset)语法. 3. Oracle的复制功能可能比M...

pczhangtl
2014/08/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

day99-20180926-英语流利阅读-待学习

换汤不换药的美容大忽悠:从抗衰老到肌肤焕发新生 Lala 2018-09-26 1.今日导读 说到护肤品,一个个大牌广告就浮现在我们眼前:皮肤吹弹可破的女明星手捧功能各异的瓶瓶罐罐,暗示着消费者买买...

飞鱼说编程
34分钟前
3
0
FFmpeg Maintainer赵军:FFmpeg关键组件与硬件加速

大家好!我是赵军,现就职于英特尔的DCG从事基于FFmpeg的硬件优化工作,两年多前加入FFmpeg社区,2018年4月成为FFmpeg的其中的一个FFmpeg Maintainer,主要负责FFmpeg的硬件优化工作。 概览:...

yizhichao
今天
1
0
ehlib 修改 使行号字体颜色 与标题字体颜色 一致

对ehlib 显示效果不够满意,而做的调整 修改这个过程:procedure TCustomDBGridEh.DrawIndicatorCell(ACol, ARow: Longint; AreaCol, AreaRow: Longint; ARect: TRect; AState: TGri......

vga
今天
1
0
Bash重定向详解

Bash重定向详解 Bash的重定向指的是将命令的输入和输出导向不同地方,而不是默认的标准输入、标准输出和标准错误。Bash的重定向实际上是对标准输入、标准输出和标准错误的重置,进而将所需输...

小陶小陶
今天
3
0
EventBus原理深度解析

一、问题描述 在工作中,经常会遇见使用异步的方式来发送事件,或者触发另外一个动作:经常用到的框架是MQ(分布式方式通知)。如果是同一个jvm里面通知的话,就可以使用EventBus。由于Event...

yangjianzhou
今天
54
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部