语法:
Create [or replace] function funtionName(parameter1 mode1 dataType1,parameter2 mode2 dataType2,….)
Return returnDataType
Is/as
--定义使用变量、返回变量
Begin
Function_body
Return expression
End functionName;--结束函数的声明,也可以直接写end不加函数名。
--其中mode1、mode2表示参数类型(in/out),dataType表示参数的数据类型,returnDataType表示返回值类型。
一个简单的列子,根据输入的数字,返回两个数的和:
create or replace function testAdd(js1 in number, js2 in number)
return number is
v_hj number;
begin
v_hj := js1 + js2;
return v_hj;
end;
返回一个table结果集:
-定义行类型
create or replace type v_record as object
(
id varchar2(32),
username varchar2(50),
name varchar2(50)
)
--以行类型定义一个表类型
create or replace type v_table is table of v_record
--函数
create or replace function getUser(username in varchar2)
return v_table is
v_row v_record; --定义单条数据变量
rs v_table:=v_table(); --定义返回结果并初始化
begin
for thisrow in(select t.id_,t.username_,t.name_ from t_sys_user t where t.username_ in ('wangying','liushaojun'))
loop
v_row := v_record(thisrow.id_,thisrow.username_,thisrow.name_);
rs.extend;
rs(rs.count):=v_row;
end loop;
return(rs);
end;
函数的调用:
select testAdd(2,3) from dual;
select * from table(getUser('wangxiyun'));