函数调用限制
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用法的更多相关文章

  1. oracle function用法(本文来自百度文库)

    函数调用限制 1.SQL语句中只能调用存储函数(服务器端),而不能调用客户端的函数 2.SQL只能调用带有输入参数,不能带有输出,输入输出函数 3.SQL不能使用PL/SQL的特有数据类型(boole ...

  2. ORACLE RETURNING 用法总结

    ORACLE RETURNING 用法总结 场景 在存储过程.PL/SQL块里需要返回INSERT.DELETE.UPDATE.MERGE等DML语句执行后的信息时使用,合理使用returning能够 ...

  3. Oracle instr用法

    1:实现indexOf功能,.从第1个字符开始,搜索第1次出现子串的位置 ,) as i from dual; select instr('oracle','or') as i from dual; ...

  4. Oracle minus用法详解及应用实例

    本文转载:https://blog.csdn.net/jhon_03/article/details/78321937 Oracle minus用法 “minus”直接翻译为中文是“减”的意思,在Or ...

  5. Oracle触发器用法实例详解

    转自:https://www.jb51.net/article/80804.htm. 本文实例讲述了Oracle触发器用法.分享给大家供大家参考,具体如下: 一.触发器简介 触发器的定义就是说某个条件 ...

  6. ORACLE SEQUENCE用法(转)

    ORACLE SEQUENCE用法 在oracle中sequence就是序号,每次取的时候它会自动增加.sequence与表没有关系. 1.Create Sequence     首先要有CREATE ...

  7. [转载]Oracle触发器用法实例详解

    本文实例讲述了Oracle触发器用法.分享给大家供大家参考,具体如下: 一.触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行. 因此触发器不需要人为的去调用,也 ...

  8. oracle function学习1

    oracle function学习基层: 函数就是一个有返回值的过程.  首先 知道oracle 使用限制:      函数调用限制: 1. SQL语句中只能调用存储函数(服务器端),而不能调用客户端 ...

  9. javascript当中Function用法

    4)Function用法 例 3.4.1 <head>    <meta http-equiv="content-type" content="text ...

随机推荐

  1. 【洛谷1337】[JSOI2004] 吊打XXX(模拟退火经典题)

    点此看题面 大致题意: 一个平面上有\(n\)个点,每个点有1个权值,现在要选择平面上的一个点,使这\(n\)个点的权值乘上到达选定点的距离之和最小. 模拟退火 我们可以用模拟退火来做这道题. 先将\ ...

  2. Hive之数据模型

    (本文是基于多篇文章根据个人理解进行的整合,参考的文章见末尾的整理) 数据模型 hive的数据模型包括:database.table.partition和bucket. 1.Database:相当于关 ...

  3. python_62_装饰器5

    import time def timer(func): #timer(test1) func=test1 def deco(*args,**kwargs): start_time=time.time ...

  4. CVE-2018-4878

    0x00前言 该漏洞影响 Flash Player 版本28.0.0.137以及之前的所有版本 0x01 poc Poc 这里只列出关键代码 public function triggeruaf() ...

  5. vuex:使用思路总结

    1. vuex是什么? 是一种数据状态管理机制. 2.vuex的构成和作用: state: 存放需要被管理的属性的对象 getters: 方便在state中做集中处理,可以把state作为第一个参数 ...

  6. C++ lambda 表达式 简介

    自己根据对lambda表达式的理解,做了一套ppt简单介绍

  7. 三、MySQL PHP 语法

    MySQL PHP 语法 MySQL 可应用于多种语言,包括 PERL, C, C++, JAVA 和 PHP. 在这些语言中,Mysql在PHP的web开发中是应用最广泛. 在本教程中我们大部分实例 ...

  8. Spring中注解大全和应用

    @Controller@RestController:@Service@Autowired@RequestMapping@RequestParam@ModelAttribute@Cacheable@C ...

  9. 02.VUE学习二之数据绑定

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  10. Linux命令之---find

    命令简介 find明林用于查找目录下的文件,同时也可以调用其他命令执行相应的操作 命令格式 find pathname -options [-print -exec -ok ...] find [选项 ...