oracle函数fun_get,oracle的函数

函数语法:

create or  replace function function_name(argu1 datatype,argu2 datatype...)

return datatype

is|as

PL/SQL Block;

自定义函数调用限制

1、SQL语句中只能调用存储函数(服务器端),而不能调用客户端的函数

函数必须是保存在数据库中。一个在客户端的PL/SQL环境中定义的函数没有办法在SQL中使用;因为SQL没有办法解析对这个函数的引用。

2、SQL只能调用带有输入参数,不能带有输出,输入输出函数

3、函数的参数以及返回值的数据类型,必须是Oracle数据库可以识别的。尽管Oracle数据库的所有数据类型在PL/SQL中都是有效的,但是PL/SQL却有一些Oracle数据库所不支持的全新的数据类型。这些数据类型包括BOOLEAN、BINARY_INTEGER、table,关联数组、PL/SQL的记录类型,以及程序员自定义的子类型。

4、SQL语句中调用的函数不能包含INSERT,UPDATE和DELETE语句

查看函数院源代码

oracle会将函数名及其源代码信息存放到数据字典中user_source

select text from user_source where name='GET_EMPNAME';

删除函数

drop function get_empname;

在建立函数时,在函数头部必须要带有RETURN语句,在函数体内至少要包含一条RETURN语句。

1.不带任何参数

create or replace function fun_user

return varchar2

is

v_user varchar2(50);

begin

select username into v_user from user_users;

return v_user;

end;

调试:

方法一

select fun_user from dual;

方法二

SQL> var v_res varchar2(100);

SQL> exec :v_res :=fun_user;

SQL> print v_res;

2.带IN参数

//通过雇员名获取员工薪水

create or replace function fun_get_sal(v_ename varchar2)

return number

is

v_error_code    number;

v_error_message varchar2(100);

v_sal           number;

begin

select sal into v_sal from emp where upper(ename) = upper(v_ename);

return v_sal;

exception

when others then

v_error_code    := sqlcode;

v_error_message := substr(sqlerrm, 1, 100);

insert into errors

(error_id, program_name, error_code, error_message)

values

(seq_errors.nextval, 'fun_get_sal', v_error_code, v_error_message);

commit;

end;

3.带OUT参数

如果要同时返回多个数据,需要使用输出参数

//返回雇员名所在的部门名和岗位

create or replace function fun_ename_info(v_ename varchar2,v_job out varchar2)

return varchar2

is

v_deptname dept.dname%type;

begin

select b.dname,a.job into  v_deptname,v_job from emp a

join dept b on a.deptno=b.deptno

where upper(a.ename) = upper(v_ename);

return v_deptname;

end;

//调试

SQL> var job varchar2(50);

SQL> var dname varchar2(50);

SQL> exec :dname :=fun_ename_info('scott',:job);

SQL> print dname job;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值