[转帖]   oracle函数和存储过程_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4022 | 回复: 0   主题: [转帖]   oracle函数和存储过程        下一篇 
funny
注册用户
等级:中校
经验:1529
发帖:111
精华:4
注册:2013-3-13
状态:离线
发送短消息息给funny 加好友    发送短消息息给funny 发消息
发表于: IP:您无权察看 2013-3-18 11:27:35 | [全部帖] [楼主帖] 楼主

  1. --1、自定义函数   
  2. create orreplace function 函数名(参数1 参数类型1,参数2 参数类型2,……) return 返回值类型 as  
  3. begin  
  4.   函数定义   
  5. end 函数名;   
  6. --实例1   
  7. select * from test1;   
  8. create orreplace function getMaxTage return number as  
  9. begin  
  10.   declare maxAge number;   
  11.   begin  
  12.     select max(tage) into maxAge from test1;   
  13.     return maxAge;   
  14.   end;   
  15. end getMaxTage;   
  16. --实例1调用   
  17. begin  
  18.   dbms_output.put_line('表test1中年纪最大的是:'||getMaxTage());   
  19. end;   
  20. --执行动态拼接SQL语句:execute immediate sql语句……   
  21. --为了提高数据库效率利用函数的确定性:在return 返回类型之后,as之前添加deterministic关键字,前提条件是函数传入参数   
  22. --一样时返回相同,第二次调用函数是数据库就用前一个计算的值,而不需要再重新计算一次.    
  23. --自定义函数+游标   
  24. create orreplace function row2column(sqlString varchar2)   
  25. return varchar2 as  
  26. begin    
  27.   declare type cu_type is ref cursor;   
  28.   temp_cursor cu_type;   
  29.   temp_row1 varchar2(20);   
  30.   temp_row2 varchar2(10);   
  31.   v_result varchar2(200);   
  32.   begin  
  33.     open temp_cursor for sqlString;   
  34.     fetch temp_cursor into temp_row1,temp_row2;   
  35.     while temp_cursor%found loop   
  36.       v_result := v_result || temp_row1 || ':' || temp_row2 || ';';   
  37.       fetch temp_cursor into temp_row1,temp_row2;   
  38.     end loop;   
  39.     return v_result; --rtrim(v_result,',')   
  40.   end;   
  41. end row2column;   
  42. --调用   
  43. select row2column('select tname,tage from test1 where tage >30') v_result from dual;   
  44. --2、存储过程   
  45. create orreplace procedure 存储过程名称(参数1 in/out 参数类型1,参数2 in/out 参数类型2,……) as  
  46. begin  
  47.   存储过程定义   
  48. end 存储过程名称;   
  49. --参数类型:   
  50. --in只进步出(表明in参数不能再存储过程内部进行修改)   
  51. --out只出不进(out参数实际作为存储过程执行结果的出口,必须使用变量为参数,变量的作用相当于占位符,只是接收存储过程内部赋值)   
  52. --in out 典型场景为交换两个变量值   
  53. --存储过程添加调试测试   
  54. create orreplace procedure insertTest1(tname in varchar2,tage in number,   
  55.                                         ori_count out number,cur_count out number) as  
  56. begin    
  57.   declare v_max_id number;   
  58.     begin  
  59.       if(tname is nullor length(tname)=0)then  
  60.          return;   
  61.       end if;   
  62.       if(tage<10 or tage>30)then  
  63.          return;   
  64.       end if;   
  65.       select count(1) into ori_count from test1;   
  66.       select max(tid) into v_max_id from test1;   
  67.       insert into test1 values(v_max_id+1,tname,tage,'test1');   
  68.       select count(1) into cur_count from test1;   
  69.     end;   
  70. end insertTest1;   
  71. --程序包   
  72. create orreplace package pkg_test as  
  73.   function getMaxTage return number;   
  74.   procedure insertTest1(tname in varchar2,tage in number,   
  75.                          ori_count out number,cur_count out number);   
  76. end pkg_test;   
  77. --   
  78. create orreplace function is_date(params varchar2) return varchar2 is  
  79. d date;   
  80. begin  
  81.   d:=to_date(nvl(params,''),'yyyy-mm-dd hh24:mi:ss');   
  82.   return 'Y';   
  83.   exception   
  84.     when others then  
  85.       return 'N';   
  86. end;   
  87. select is_date('20101010') from dual;  




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论