oracle function用法
函数调用限制
1、SQL语句中只能调用存储函数(服务器端),而不能调用客户端的函数
2、SQL只能调用带有输入参数,不能带有输出,输入输出函数
3、SQL不能使用PL/SQL的特有数据类型(boolean,table,record等)
4、SQL语句中调用的函数不能包含INSERT,UPDATE和DELETE语句
1.function函数的语法如下:
create or replace function function_name (
argu1 [mode1] datatype1, --定义参数变量
argu2 [mode2] datatype2 --定义参数变量
) return datatype --定义返回的数据类型
is begin end;
执行:
var v1 varchar2(100)
exec :v1:=function_name
2.不带任何参数的定义
create or replace function get_user
return varchar2
is
Result varchar2(50); --定义变量
begin
select username into Result from user_users;
return(Result); --返回值
end get_user;
3.带有in参数的
create or replace function get_sal(
empname in varchar2
) return number
is
Result number;
begin
select sal into Result from emp where ename=empname;
return(Result);
end;
执行:
SQL> var sal number
SQL> exec :sal:=get_sal('scott');
4.带out参数的
create or replace function get_info(
e_name varchar2,
job out varchar2
) return number
Is
Result number;
begin
select sal,job into Result,job from emp where ename=e_name;
return(Result);
end;
执行:
SQL> var job varchar2(20)
SQL> var dname varchar2(20)
SQL> exec :dname:=get_info('SCOTT',:job)
5.带in out参数的
6.函数调用举例
create or replace function f_sys_getseqid(
v_seqname IN VARCHAR2,
v_provincecode IN VARCHAR2 --省编码
) return Varchar2
IS
iv_date VARCHAR2(8);
iv_seqname VARCHAR2(50);
iv_sqlstr VARCHAR2(200);
iv_seq VARCHAR2(8);
iv_seqid VARCHAR2(16);
BEGIN
iv_seqname := LOWER(TRIM(v_seqname));
iv_sqlstr := 'SELECT '||iv_seqname||'.nextval FROM DUAL';
EXECUTE IMMEDIATE iv_sqlstr INTO iv_seq;--执行动态的sql语句,执行相似的一组语句
IF v_seqname = 'SEQ_FUNCROLE_ID' THEN
iv_seqid:= 'ESS' || LPAD(iv_seq,5,'');
ELSE
SELECT substrb(v_provincecode,1,2)||TO_CHAR(SYSDATE,'yymmdd') INTO iv_date FROM DUAL;
iv_seqid:= iv_date || LPAD(iv_seq,8,'');
END IF;
RETURN iv_seqid;
EXCEPTION
WHEN OTHERS THEN
RETURN NULL;
END;
调用方式如下:
SELECT TO_NUMBER(F_SYS_GETSEQID('SEQ_TERMTRADE_ID', V_PROVINCE_CODE)) INTO V_BATCH_ID FROM DUAL;
EXECUTE IMMEDIATE的说明:执行动态的sql语句。
函数中使用游标
create or replace function getcustprodinstaddr(in_CustId in number,in_area_code in number)
return varchar2
is
Result varchar2(4000);
v_acc_nbr varchar2(400);
tempCount number:=1;
type ref_cursor is ref cursor;
v_cursor ref_cursor;
begin
Result:='';
open v_cursor for
'select install_addr from tb_prd_prd_inst_'||to_char(in_area_code)||
' where PRD_INST_STAS_ID not in('''','''','''','''')
and own_cust_id='||to_char(in_CustId)||' order by install_date desc';
loop
fetch v_cursor into v_acc_nbr;
exit when v_cursor%notfound;
if(tempCount>8) then
goto label_end;
end if;
Result:=v_acc_nbr||','||Result;
tempCount := tempCount +1;
end loop;
<<label_end>>
close v_cursor;
return(Result);
exception
when others then
if(v_cursor%isopen) then
close v_cursor;
end if;
return '';
end getcustprodinstaddr;
oracle function用法的更多相关文章
- oracle function用法(本文来自百度文库)
函数调用限制 1.SQL语句中只能调用存储函数(服务器端),而不能调用客户端的函数 2.SQL只能调用带有输入参数,不能带有输出,输入输出函数 3.SQL不能使用PL/SQL的特有数据类型(boole ...
- ORACLE RETURNING 用法总结
ORACLE RETURNING 用法总结 场景 在存储过程.PL/SQL块里需要返回INSERT.DELETE.UPDATE.MERGE等DML语句执行后的信息时使用,合理使用returning能够 ...
- Oracle instr用法
1:实现indexOf功能,.从第1个字符开始,搜索第1次出现子串的位置 ,) as i from dual; select instr('oracle','or') as i from dual; ...
- Oracle minus用法详解及应用实例
本文转载:https://blog.csdn.net/jhon_03/article/details/78321937 Oracle minus用法 “minus”直接翻译为中文是“减”的意思,在Or ...
- Oracle触发器用法实例详解
转自:https://www.jb51.net/article/80804.htm. 本文实例讲述了Oracle触发器用法.分享给大家供大家参考,具体如下: 一.触发器简介 触发器的定义就是说某个条件 ...
- ORACLE SEQUENCE用法(转)
ORACLE SEQUENCE用法 在oracle中sequence就是序号,每次取的时候它会自动增加.sequence与表没有关系. 1.Create Sequence 首先要有CREATE ...
- [转载]Oracle触发器用法实例详解
本文实例讲述了Oracle触发器用法.分享给大家供大家参考,具体如下: 一.触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行. 因此触发器不需要人为的去调用,也 ...
- oracle function学习1
oracle function学习基层: 函数就是一个有返回值的过程. 首先 知道oracle 使用限制: 函数调用限制: 1. SQL语句中只能调用存储函数(服务器端),而不能调用客户端 ...
- javascript当中Function用法
4)Function用法 例 3.4.1 <head> <meta http-equiv="content-type" content="text ...
随机推荐
- 手把手教你用Docker部署一个MongoDB集群
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中最像关系数据库的.支持类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引 ...
- Android(java)学习笔记95:Android运行时异常"Binary XML file line # : Error inflating class"
在原生Android下编译APK,编译没有问题,但是在运行的时候经常出现如标题所描述的异常:"Binary XML file line # : Error inflating class&q ...
- C语言 数组名不是首地址指针
今天上计算机系统课的时候老师讲到了C中的聚合类型的数据结构.在解释数组名的时候说"数组名是一个指针,指向该数组的第一个元素",附上ppt(第二行): 我觉得这是不正确的,是一个常见 ...
- vue切换路由时动画
安装个包 npm i nprogress 直接导入使用 最终的效果就是
- CentOS---zookeeper安装(单机、伪集群、集群)
一:单机安装: 可以参考下面的伪集群安装方式 不同点: 不需要在data目录下创建 myid 文件 不需要配置集群 配置好后的启动和状态查询命令相同!! 二:伪集群模式 伪集群模式就是在同一主机上启动 ...
- [Wolfgang Mauerer] 深入linux 内核架构 第二章 进程管理与调度【未完】
作为Linux开发爱好者,从事linux 开发有三年多时间.做过bsp移植,熟悉u-boot代码执行流程:看过几遍<linux 设备驱动程序开发>,分析过kernel启动流程,写过驱动, ...
- SSM(Spring+Spring MVC+Mybatis)开发前台后功能完整的java开源博客管理系统
项目描述 本项目通过SSM(SpringMVC+Mybatis+Spring)框架编写的一个人博客管理系统,使用hexo主题,以及MAVEN进行对项目管理,并且前端具有粒子和点击爱心效果.后端的页面框 ...
- url地址形式的传参格式拼接
例子一: var gid=pid=pizi=sn=newsn=sn_price=city_id=123; var params = 'gid=' +123; params += '&pid=' ...
- Codeforces Round #460 (Div. 2)-C. Seat Arrangements
C. Seat Arrangements time limit per test1 second memory limit per test256 megabytes Problem Descript ...
- HashTable, HashMap,TreeMap区别
java为数据结构中的映射定义了一个接口java.util.Map,而HashMap Hashtable和TreeMap就是它的实现类.Map是将键映射到值的对象,一个映射不能包含重复的键:每个键最多 ...