设为首页 收藏本站
查看: 944|回复: 0

[经验分享] PL/SQL-05

[复制链接]

尚未签到

发表于 2018-10-23 07:20:39 | 显示全部楼层 |阅读模式
  过程、函数与包
  过程、函数与包都属于PL/SQL语句块的命名块,过程和函数统称为子程序。
  过程和函数非常相似,具有如下特点:
  1、都具有名称,可以接收传入或者传出参数
  2、都具有声明部分,执行部分,异常处理部分
  3、在使用前会被编译并存储到数据库中
  4、函数和过程的最大区别在于函数具有返回值,而过程没有
  create or replace procedure addempsalary ( p_ratio number , p_empno number )
  as
  begin
  if p_ratio > 0
  then
  update scott.emp set sal = sal * ( 1 + p_ratio) where empno = p_empno ;
  end if;
  dbms_output.put_line('加薪成功!');
  end ;
  包是一个逻辑单位,PL/SQL可以让开发人员把逻辑相关的类型、变量、游标和子程序放在一个包内,这样更加清楚,易于理解
  包规范部分:包规范部分定义了应用程序的接口,他声明了变量、常量、类型、异常、游标等。
  包体部分:包体部分用于实现包规范部分声明的子程序和游标。
  包规范的建立使用 create package 语句 , 包体的建立使用create package body语句。
  /* 包规范定义 */
  create or replace package empsalary
  as
  --执行实际的加薪动作
  procedure addempsalary (p_ratio number , p_empno number ) ;
  --使用if-elsif 语句得到加薪比例
  function change_sal (p_job varchar2) return number ;
  --使用case 语句得到加薪比率
  function getaddsalaryratiocase (p_job varchar2) return number ;
  end empsalary ;
  /* 包体定义 */
  create or replace package body empsalary
  as
  --过程加薪
  procedure addempsalary ( p_ratio number , p_empno number )
  as
  begin
  if p_ratio > 0
  then
  update scott.emp set sal = sal * ( 1 + p_ratio) where empno = p_empno ;
  end if;
  dbms_output.put_line('加薪成功!');
  end ;
  --使用if-elsif 语句得到加薪比例
  function change_sal (p_job varchar2)
  return number
  as v_result number(7,2) ;
  begin
  if  p_job = 'CLERK' then v_result := 0.1 ;
  elsif p_job = 'SALESMAN' then v_result := 0.15 ;
  elsif p_job = 'MANAGER' then v_result := 0.2 ;
  end if;
  return v_result ;
  end;
  --使用case 语句得到加薪比率
  function getaddsalaryratiocase ( p_job varchar2 ) return number
  as v_result number (7,2) ;
  begin
  case p_job
  when 'CLERK' then v_result := 0.10 ;
  when 'SALESMAN' then v_result := 0.15 ;
  when 'MANAGER' then v_result := 0.20 ;
  end case ;
  return v_result;
  exception when others
  then dbms_output.put_line('产生异常:');
  end ;
  end empsalary;


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-625141-1-1.html 上篇帖子: SQL注入中的WAF绕过技术 下篇帖子: sql2005 本地计算机上的SQL SERVER服务启动后又停止了解决方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表