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

[经验分享] oracle之路(三)---pl/sql 块

[复制链接]

尚未签到

发表于 2016-7-24 12:53:35 | 显示全部楼层 |阅读模式
  



--异常测试
declare
v_ename emp.empno%type;--定义变量
begin
select ename into v_ename from emp where empno =  &gno;
dbms_output.put_line('名字:' || v_ename);
exception
when no_data_found then
dbms_output.put_line('未找到');
end;
/
  

  
  pl/sql是什么
pl/sql(procedural language/sql)是oracle在标准的sql语言上的扩展。pl/sql不仅允许嵌入sql语言,还可以定义变量和常量,允许使用条件语句和循环语句,允许使用例外处理各种错误,这样使得它的功能变得更加强大。

看图:


为什么学pl/sql

学习必要性

1.提高应用程序的运行性能

2.模块化的设计思想【分页的过程,订单的过程,转账的过程。。】

3.减少网络传输量

4.提高安全性(sql会包括表名,有时还可能有密码,传输的时候会泄露。PL/SQL就不会)


为什么PL/SQL会快呢?看图:

不好的地方:
移植性不好(换数据库就用不了),


用什么编写pl/sql

sqlplus开发工具
  sqlplus是oracle公司提供的一个工具,这个因为我们在以前介绍过的:

举一个简单的案例:

编写一个存储过程,该过程可以向某表中添加记录。

1.创建一个简单的表

  Sql代码



  • createtablemytest(namevarchar2(30),passwdvarchar2(30));
  createtable mytest(name varchar2(30),passwd varchar2(30));
  

2.创建过程
  Sql代码



  • createorreplaceproceduresp_pro1is
  • begin--执行部分
  • insertintomytestvalues('韩顺平','m1234');
  • end;
  • /
  create or replace procedure sp_pro1 is
  begin--执行部分
  insert into mytest values('韩顺平','m1234');
  end;
  /
  

replace:表示如果有sp_pro1,就替换
  如何查看错误信息:showerror;
  如何调用该过程:
  1)exec 过程名(参数值1,参数值2...);
  2)call 过程名(参数值1,参数值2...);
  
  pl/sqln developer开发工具

pl/sql developer是用于开发pl/sql块的集成开发环境(ide),它是一个独立的产品,而不是oracle的一个附带品。

举一个简单案例:

编写一个存储过程,该过程可以删除某表记录。
  Sql代码



  • createorreplaceproceduresp_pro2is
  • begin--执行部分
  • deletefrommytestwherename='韩顺平';
  • end;
  createor replace procedure sp_pro2 is
  begin--执行部分
  deletefrom mytest where name='韩顺平';
  end;
  


  
  pl/sql介绍
  介绍
  开发人员使用pl/sql编写应用模块时,不仅需要掌握sql语句的编写方法,还要掌握pl/sql语句及语法规则。pl/sql编程可以使用变量和逻辑控制语句,从而可以编写非常有用的功能模块。比如:分页存储过程模块、订单处理存储过程模块、转账存储过程模块。而且如果使用pl/sql编程,我们可以轻松地完成非常复杂的查询要求。
  

pl/sql可以做什么

简单分类
  |————过程(存储过程)

|

|————函数

块(编程)—————|

|————触发器

|

|————包


  编写规范
  1.注释

单行注释 --
  Sql代码



  • select*fromempwhereempno=7788;--取得员工信息
  select* from emp where empno=7788; --取得员工信息
  
  多行注释 /*...*/来划分

2.标志符号的命名规范

1).当定义变量时,建议用v_作为前缀v_sal

2).当定义常量时,建议用c_作为前缀c_rate

3).当定义游标时,建议用_cursor作为后缀emp_cursor

4).当定义例外时,建议用e_作为前缀e_error


pl/sql块介绍
  介绍
  块(block)是pl/sql的基本程序单元,编写pl/sql程序实际上就是编写pl/sql块,要完成相对简单的应用功能,可能只需要编写一个pl/sql块,但是如果想要实现复杂的功能,可能需要在一个pl/sql块中嵌套其它的pl/sql块。


  块结构示意图n
  pl/sql块由三个部分构成:定义部分,执行部分,例外处理部分。
  如下所示:
  Declare
  /*定义部分——定义常量、变量、游标、例外、复杂数据类型*/

begin

/*执行部分——要执行的pl/sql语句和sql语句*/

exception
  /*例外处理部分——处理运行的各种错误*/

end;
  定义部分是从declare开始的,该部分是可选的;

执行部分是从begin开始的,该部分是必须的;

例外处理部分是从exception开始的,该部分是可选的。

可以和java编程结构做一个简单的比较。


  pl/sql块的实例(1)
  实例1-只包括执行部分的pl/sql块
  Sql代码



  • setserveroutputon--打开输出选项
  • begin
  • dbms_output.put_line('hello');
  • end;
  setserveroutput on --打开输出选项
  begin
  dbms_output.put_line('hello');
  end;
  相关说明:

dbms_output是oracle所提供的包(类似java的开发包),该包包含一些过程,put_line就是dbms_output包的一个过程。
  
  pl/sql块的实例(2)

实例2-包含定义部分和执行部分的pl/sql块n
  Sql代码



  • declare
  • v_enamevarchar2(5);--定义字符串变量
  • begin
  • selectenameintov_enamefromempwhereempno=&aa;
  • dbms_output.put_line('雇员名:'||v_ename);
  • end;
  • /
  declare
  v_ename varchar2(5); --定义字符串变量
  begin
  select ename into v_ename from emp whereempno=&aa;
  dbms_output.put_line('雇员名:'||v_ename);
  end;
  /
  
  如果要把薪水也显示出来,那么执行部分就应该这么写:
  Sql代码



  • selectename,salintov_ename,v_salfromempwhereempno=&aa;
  selectename,sal into v_ename,v_sal from emp where empno=&aa;
  相关说明:

& 表示要接收从控制台输入的变量。看图:


  pl/sql块的实例(3)

实例3-包含定义部分,执行部分和例外处理部分n

为了避免pl/sql程序的运行错误,提高pl/sql的健壮性,应该对可能的错误进行处理,这个很有必要。

1.比如在实例2中,如果输入了不存在的雇员号,应当做例外处理。

2.有时出现异常,希望用另外的逻辑处理,[网示]

我们看看如何完成1的要求。

相关说明:

oracle事先预定义了一些例外,no_data_found就是找不到数据的例外。

运维网声明 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-248660-1-1.html 上篇帖子: oracle xmltype 创建 、插入、更新、查找 下篇帖子: oracle中NLS_LANG的含义
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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