- --1、自定义函数
- create orreplace function 函数名(参数1 参数类型1,参数2 参数类型2,……) return 返回值类型 as
- begin
- 函数定义
- end 函数名;
- --实例1
- select * from test1;
- create orreplace function getMaxTage return number as
- begin
- declare maxAge number;
- begin
- select max(tage) into maxAge from test1;
- return maxAge;
- end;
- end getMaxTage;
- --实例1调用
- begin
- dbms_output.put_line('表test1中年纪最大的是:'||getMaxTage());
- end;
- --执行动态拼接SQL语句:execute immediate sql语句……
- --为了提高数据库效率利用函数的确定性:在return 返回类型之后,as之前添加deterministic关键字,前提条件是函数传入参数
- --一样时返回相同,第二次调用函数是数据库就用前一个计算的值,而不需要再重新计算一次.
- --自定义函数+游标
- create orreplace function row2column(sqlString varchar2)
- return varchar2 as
- begin
- declare type cu_type is ref cursor;
- temp_cursor cu_type;
- temp_row1 varchar2(20);
- temp_row2 varchar2(10);
- v_result varchar2(200);
- begin
- open temp_cursor for sqlString;
- fetch temp_cursor into temp_row1,temp_row2;
- while temp_cursor%found loop
- v_result := v_result || temp_row1 || ':' || temp_row2 || ';';
- fetch temp_cursor into temp_row1,temp_row2;
- end loop;
- return v_result; --rtrim(v_result,',')
- end;
- end row2column;
- --调用
- select row2column('select tname,tage from test1 where tage >30') v_result from dual;
- --2、存储过程
- create orreplace procedure 存储过程名称(参数1 in/out 参数类型1,参数2 in/out 参数类型2,……) as
- begin
- 存储过程定义
- end 存储过程名称;
- --参数类型:
- --in只进步出(表明in参数不能再存储过程内部进行修改)
- --out只出不进(out参数实际作为存储过程执行结果的出口,必须使用变量为参数,变量的作用相当于占位符,只是接收存储过程内部赋值)
- --in out 典型场景为交换两个变量值
- --存储过程添加调试测试
- create orreplace procedure insertTest1(tname in varchar2,tage in number,
- ori_count out number,cur_count out number) as
- begin
- declare v_max_id number;
- begin
- if(tname is nullor length(tname)=0)then
- return;
- end if;
- if(tage<10 or tage>30)then
- return;
- end if;
- select count(1) into ori_count from test1;
- select max(tid) into v_max_id from test1;
- insert into test1 values(v_max_id+1,tname,tage,'test1');
- select count(1) into cur_count from test1;
- end;
- end insertTest1;
- --程序包
- create orreplace package pkg_test as
- function getMaxTage return number;
- procedure insertTest1(tname in varchar2,tage in number,
- ori_count out number,cur_count out number);
- end pkg_test;
- --
- create orreplace function is_date(params varchar2) return varchar2 is
- d date;
- begin
- d:=to_date(nvl(params,''),'yyyy-mm-dd hh24:mi:ss');
- return 'Y';
- exception
- when others then
- return 'N';
- end;
- select is_date('20101010') from dual;
|