文档章节

oracle自定义函数语法及使用

卢瑶
 卢瑶
发布于 2016/06/17 12:02
字数 501
阅读 187
收藏 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列转行函数在Oracle11的一些不兼容问题,vm_concat在一些业务场景是必须的。不过这个函数使用要谨慎,底层实现应该也是group by等等实现的,性能并不是特别好。...

smileNicky
12/07
0
0
Oracle自定义函数与存储过程

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

HarleyZhuge
2017/11/22
5
0
Mysql /Oralce 50个区别

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

pczhangtl
2014/08/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

错误: 找不到或无法加载主类

在IDEA的使用过程中,经常断掉服务或者重启服务,最近断掉服务重启时突然遇到了一个启动报错: 错误:找不到或无法加载主类 猜测:1,未能成功编译; 尝试:菜单---》Build---》Rebuild Pro...

安小乐
16分钟前
1
0
vue路由传参,刷新页面,引发的bug

最近遇到一个bug 通过vue路由跳转到页面, 然后接参控制(v-if ),成功显示 而刷新页面,显示失败。 苦苦地找了半天原因,打印参数发现正确,再打印下类型......,路由跳过来会保持传参时的...

hanbb
17分钟前
0
0
【58沈剑 架构师之路】InnoDB,select为啥会阻塞insert?

MySQL的InnoDB的细粒度行锁,是它最吸引人的特性之一。 但是,如《InnoDB,5项最佳实践》所述,如果查询没有命中索引,也将退化为表锁。 InnoDB的细粒度锁,是实现在索引记录上的。 一,Inn...

张锦飞
20分钟前
0
0
冒泡,选择和插入排序比较

/** * 冒泡排序,两层嵌套循环,内层局部比较后,找出最大或者最小数据并交换数据,使其局部有序,外层用于比较剩余元素,相较于选择排序,选择排序相当于是冒泡的一个优化版本(减少了交换...

strict_nerd
21分钟前
0
0
html内联(行内)元素、块级(块状)元素和行内块元素分类

HTML可以将元素分类方式分为内联(行内)元素、块级(块状)元素和行内块元素三种。 注:HTML是标签语言,那么既然是标签,就可以自己定义一些自己元素(如<wode>自定义的元素</wode>等),自...

NB-One
27分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部