文档章节

oracle自定义函数语法及使用

卢瑶
 卢瑶
发布于 2016/06/17 12:02
字数 501
阅读 119
收藏 0
点赞 0
评论 1

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
博文 76
码字总数 44827
作品 0
徐汇
程序员
加载中

评论(1)

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

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

德哥 ⋅ 04/18 ⋅ 0

PostgreSQL Oracle PL/SQL 兼容性之 - AGGREGATE USING Clause 聚合函数

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

德哥 ⋅ 06/21 ⋅ 0

Oracle自定义函数与存储过程

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

HarleyZhuge ⋅ 2017/11/22 ⋅ 0

MyBatis之动态SQL语句

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

晨曦之光 ⋅ 2012/04/25 ⋅ 0

Mysql /Oralce 50个区别

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

pczhangtl ⋅ 2014/08/03 ⋅ 0

CYQ.Data 轻量数据层之路 V3.5版本发布-[开启同语句多数据库运行支持]

前言: 继正式发布V3.0到现在,刷的一下又20天过去了,而框架随着“路过秋天版博客”的开发,始终没停下,一直在前进!!! 目前博客正在慢悠悠的开发着 ~最近花了很多时间看动漫去了,哈哈~...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

oracle的函数

函数语法: create or replace function functionname(argu1 datatype,argu2 datatype...) return datatype is|as PL/SQL Block; 自定义函数调用限制 1、SQL语句中只能调用存储函数(服务器端...

浮云飘飘 ⋅ 2014/04/24 ⋅ 0

Mysql 和 Postgresql 对比

Mysql 使用太广泛了,以至于我不得不将一些应用从mysql 迁移到postgresql, 很多开源软件都是以Mysql 作为数据库标准,并且以Mysql 作为抽象基础的,但是具体使用过程中,发现Mysql 有很多问题...

宏哥 ⋅ 2010/12/14 ⋅ 63

Oracle排序中NULL值处理的五种常用方法

1、缺省处理 Oracle在Order by 时缺省认为null是最大值,所以如果是ASC升序则排在最后,DESC降序则排在最前 2、使用nvl函数 nvl函数可以将输入参数为空时转换为一特定值,如 nvl(employeena...

GoYang ⋅ 2012/11/14 ⋅ 0

Oracle 排序中常用的NULL值处理方法

1、缺省处理 Oracle在Order by 时缺省认为null是最大值,所以如果是ASC升序则排在最后,DESC降序则排在最前 2、使用nvl函数 nvl函数可以将输入参数为空时转换为一特定值,如nvl(employeenam...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Jenkins实践3 之脚本

#!/bin/sh# export PROJ_PATH=项目路径# export TOMCAT_PATH=tomcat路径killTomcat(){pid=`ps -ef | grep tomcat | grep java|awk '{print $2}'`echo "tom...

晨猫 ⋅ 今天 ⋅ 0

Spring Bean的生命周期

前言 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解。 首先看下生命周期图: 再谈生命周期之前有一点需要先明确: Spring 只帮我们管理单例模...

素雷 ⋅ 今天 ⋅ 0

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部