函数调用限制

  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.函数调用举例

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,'0');

ELSE

SELECT substrb(v_provincecode,1,2)||TO_CHAR(SYSDATE,'yymmdd') INTO iv_date FROM DUAL;

iv_seqid:= iv_date || LPAD(iv_seq,8,'0');

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语句。

最新文章

  1. truncate 、delete与drop区别
  2. c/c++ printf
  3. Ruby界面开发--wxRuby库TextCtrl相关问题
  4. android 模拟器 使用键盘的配置
  5. phpcms v9 源码解析(3)pc_base::creat_app()
  6. 自定义tab bar控件 学习资料
  7. Android 实现闹钟功能
  8. 转:Gulp使用指南
  9. [转] Boost智能指针——scoped_ptr
  10. HTTP协议详解以及URL具体访问过程
  11. RSA简介(四)——求逆算法
  12. ECMAScript 6 之 let 和 const 命令
  13. jmeter分布式压测(多台电脑一起压测)
  14. JS 的加密库简介
  15. vue之导入Bootstrap以及jQuery的两种方式
  16. Python内置数据结构--列表
  17. MySQL数据库优化小建议
  18. 跨域的案例 以百度接口/手写接口为例,还有jQuery写法
  19. 【javascript】您好, 您要的ECMAScript6速记套餐到了 (一)
  20. windows 环境变量

热门文章

  1. zeptojs库解读2之事件模块
  2. linux中批量替换文本中字符串--转载
  3. Chrome开发者工具之JavaScript内存分析(转)
  4. Python -- Scrapy 框架简单介绍(Scrapy 安装及项目创建)
  5. 第一次学习 CG( c for graphic) 遇到的一大推坑
  6. 解决SVN图标不显示问题
  7. SpringBoot+Mybatis-Generator自动生成
  8. 莫比乌斯反演学习笔记(转载自An_Account大佬)
  9. OC 复合
  10. 实现自己的ls命令