oracle 自定义函数
函数和存储过程类似,可以简单的理解为一段可以执行某个活动/动作的子程序,可以作为一个系统对象被存储在数据库中,可以重复调用。与存储过程不同的是,函数总是向调用者返回一个值,而存储过程不能有返回值。
- CREATE [OR REPLACE] FUNCTION function_name
- [(argment [ { IN| IN OUT }] type,
- argment [ { IN | OUT | IN OUT } ] type]
- RETURN return_type
- { IS | AS }
- <类型.变量的说明>
- BEGIN
- FUNCTION_body
- EXCEPTION
- 异常处理语句
- END;
- --IN:输入参数,向存储过程传递值,默认类型,可以不写
- --OUT:输出参数,用于返回结果。
- --IN OUT:作为IN参数向存储过程传递值,同时作为OUT参数返回值。
- --REPLACE:指明若已有同名的存储过程存在,那么将被替换成当前创建的版本。
- --RETURN只能返回单个值,不能返回多个值。
- --可以使用DEFAULT关键字为输入参数指定默认值。
- --没有参数的函数
- create or replace function get_user return varchar2 is
- v_user varchar2(50);
- begin
- select username into v_user from user_users;
- return v_user;
- end get_user;
- --测试
- 方法一
- select get_user from dual;
- 方法二
- SQL> var v_name varchar2(50)
- SQL> exec :v_name:=get_user;
- PL/SQL 过程已成功完成。
- SQL> print v_name
- V_NAME
- ------------------------------
- TEST
- 方法三
- SQL> exec dbms_output.put_line('当前数据库用户是:'||get_user);
- 当前数据库用户是:TEST
- PL/SQL 过程已成功完成
- --带有IN参数的函数
- create or replace function get_empname(v_id in number) return varchar2 as
- v_name varchar2(50);
- begin
- select name into v_name from employee where id = v_id;
- return v_name;
- exception
- when no_data_found then
- raise_application_error(-20001, '你输入的ID无效!');
- end get_empname;
函数的调用:
把函数作为PL/SQL中的表达式调用
例如:假如函数getID()可以返回值,可以这样调用:SELECT * FROM table WHERE id=getID()
创建一个变量用于接收函数的返回值
例如:VARIABLE id NUMBER;
EXECUTE :id := getID();
PRINT(id);
调用函数的位置:
l SELECT 语句的列表部分,eg: SELECT fun(..)….
l WHERE 或 HAVING 字句 eg:WHERE id=fun(…)…
l ORDER BY 、CONNECT BY、START WITH、GROUP BY 字句
l INSERT 语句的VALUES部分 INSERT INTO table VALUES(..,fun(),..)
l UPDATE 语句的SET部分 eg:UPDATE table SET name=fun(…)
l PL/SQL块
要让函数可以在SQL表达式中调用,必须满足以下条件:
1. 应该是stored function
2. 只接收IN参数
3. 传入参数和返回值都必须是SQL支持的类型,不能是PL/SQL中的特殊类型(例如boolean)
函数调用限制
1、SQL语句中只能调用存储函数(服务器端),而不能调用客户端的函数。
2、SQL只能调用带有输入参数,不能带有输出,输入输出函数。
3、SQL不能使用PL/SQL的特有数据类型(boolean,table,record等)。
4、SQL语句中调用的函数不能包含INSERT,UPDATE和DELETE语句。
oracle 自定义函数的更多相关文章
- Mybatis下配置调用Oracle自定义函数返回的游标结果集
在ibatis和Mybatis对存储过程和函数函数的调用的配置Xml是不一样的,以下是针对Mybatis 3.2的环境进行操作的. 第一步配置Mapper的xml内容 <mapper names ...
- 【转】Oracle 自定义函数语法与实例
原文地址:https://blog.csdn.net/libertine1993/article/details/47264211 Oracle自定义函数的语法如下: create or replac ...
- Oracle自定义函数和存储过程示例,自定义函数与存储过程区别
参考资料:http://www.newbooks.com.cn/info/60861.html oracle自定义函数学习和连接运算符(||) 贴一段中文文档示例,应该就可以开始工作了: --过程(P ...
- Oracle自定义函数1
用户定义函数是存储在数据库中的代码块,可以把值返回到调用程序.调用时如同系统函数一样,如max(value)函数,其中,value被称为参数.函数参数有3种类型. IN 参数类型:表示输入给函数的参数 ...
- Oracle自定义函数
核心提示:函数用于返回特定数据.执行时得找一个变量接收函数的返回值; 语法如下: create or replace function function_name ( argu1 [mode1] da ...
- Oracle自定义函数&加密
在sql中频繁使用的功能(逻辑.加密等)可以写成自定义函数进行封装,之后再调用即可. CREATE OR REPLACE FUNCTION "函数名" (参数名 参数类型 参数数据 ...
- oracle自定义函数:将使用点分隔符的编码转成层级码格式的编码
维护一个旧的系统,表设计中只有编码,而没有其他排序相关的字段,然后根据编码排序出现了顺序错乱的问题. 详细地说,其编码设计是使用[.]分隔符的编码,比如1.1.1.1.1.1.1.1.1.2这样的格式 ...
- Oracle 自定义函数实现列转行效果
在 Oracle 领域,我相信一说到列转行大部分人都会立马想到 WM_CONCAT 函数,我觉得主要是因为该函数比较实用.但事实上 WM_CONCAT 并非官方公开函数,使用会存在一定的风险:函数返回 ...
- Oracle 自定义函数Function
示例代码: CREATE OR REPLACE FUNCTION "MY_DATABASE"."F_GET_USER_COUNT_BY_DEPART" ( D ...
随机推荐
- Things make us different
Don't just accumulate knowledge, apply it. You will never really know or understand something until ...
- 话说Centos下nginx,php,mysql以及phpmyadmin的配置
大话centos下部署phalcon框架 Centos还是ubuntu? 当我沿用这个标题的时候,心里在想"我能说我之前用的windows吗?",windows下xampp,wam ...
- 深入浅出ExtJS 第七章 弹出窗口
7.1 Ext.MessageBox 7.1 Ext.MessageBox //Ext.MessageBox为我们提供的alert/confirm/prompt等完全可以代替浏览器原生; 7.1.1 ...
- [转]美国的软件公司是什么样?---- 以Fog Creek为例
作者: 阮一峰 日期: 2009年2月15日 Joel写过一篇文章,关于软件公司如何雇到优秀的程序员. 他说,软件公司的头等大事,就是找到第一流的人才.不同于其他行业,软件是一种纯智力产品,你有什么样 ...
- Part 3 ViewData and ViewBag in mvc
ViewBag and ViewData is a mechanism(机制) to pass data from controller to view. We use '@' symbol(符号) ...
- Part 64 to 66 Talking about Indexers in C#
Part 64 - C# Tutorial - How and where are indexers used in .net Part 65 - C# Tutorial - Indexers in ...
- IIS7下swfupload上传大文件出现404错误
要求上传附件大小限制在2G,原本以为可以轻松搞定.在编译模式下可以上传大文件,可是在IIS7下(自己架的服务器),一上传大的文件就会出现 Http 404错误,偶尔有的文件还有IO. error错误. ...
- 理解C#系列 / C#语言的特性
C#语言的特性 大多数语句都已(;)结尾 用({})定义语句块 单行注释(//),多行注释(/*......*/)智能注释(///) 区分大小写 用namespace名称空间对类进行分类 在C#中的所 ...
- webSphere提示SSL证书过期,解决方法
1.点击Security ------SSL certificate and key management2.点击Related Items下的key stores and certificates3 ...
- linux交叉编译裁剪内核记录
刚开始学习嵌入式内核编译,因为要修改内核的默认配置,因此这里把自己的学习记录写下来,方便以后查阅,也给别人一个参考,有什么写的不对的或者更好的方法,请指正~ 开发板有usb从口,现在想要让开发板作为一 ...