PLSQL块结构

pl/sql(procedural language/sql)是oracle在标准的sql语言上的扩展。pl/sql不仅允许嵌入sql语言,还可以定义变量和常量,允许使用条件语句和循环语句,允许使用例外处理各种错误,这样使得它的功能变得更加强大。
1. 为什么学pl/sql?
(1). 提高应用程序的运行性能
(2). 模块化的设计思想 [ 分页的过程,订单的过程,转账的过程。。]
(3). 减少网络传输量
(4). 提高安全性(sql会包括表名,有时还可能有密码,传输的时候会泄露。PL/SQL就不会) 
2.  不好的地方
(1). 移植性不好(换数据库就用不了)
(2). 用什么编写pl/sql
3.  举一个简单的案例
编写一个存储过程,该过程可以向某表中添加记录。
(1). 创建一个简单的表
       create table mytest(name varchar2(30),passwd varchar2(30)); 
(2). 创建过程

create or replace procedure sp_pro1 is begin --执行部分 insert into mytest values('skycloud','skycloud'); end;  

      replace:表示如果有sp_pro1,就替换 
      如何查看错误信息:show error; 
(3). 如何调用该过程:
      1)exec 过程名(参数值1,参数值2...); 
      2)call 过程名(参数值1,参数值2...);  
4.  pl/sql介绍 
     开发人员使用pl/sql编写应用模块时,不仅需要掌握sql语句的编写方法,还要掌握pl/sql语句及语法规则。pl/sql编程可以使用变量和逻辑控制语句,从而可以编写非常有用的功能模块。比如:分页存储过程模块、订单处理存储过程模块、转账存储过程模块。而且如果使用pl/sql编程,我们可以轻松地完成非常复杂的查询要求。

(1). 简单分类
                          |————过程(存储过程)
                          | 
                          |————函数
      块(编程)———| 
                          |————触发器
                          |
                          |————包

(2). 编写规范
      a. 单行注释 --
          select * from emp where empno=7788;  --取得员工信息 
      b. 多行注释 /*...*/ 来划分
(3). 标志符号的命名规范
      1).当定义变量时,建议用v_作为前缀v_sal 
      2).当定义常量时,建议用c_作为前缀c_rate
      3).当定义游标时,建议用_cursor作为后缀emp_cursor
      4).当定义例外时,建议用e_作为前缀e_error
5.  pl/sql块介绍 
     块(block)是pl/sql的基本程序单元,编写pl/sql程序实际上就是编写pl/sql块,要完成相对简单的应用功能,可能只需要编写一个pl/sql块,但是如果想要实现复杂的功能,可能需要在一个pl/sql块中嵌套其它的pl/sql块。 
pl/sql 块由三个部分构成:定义部分,执行部分,例外处理部分。
如下所示。
declare
/*定义部分——定义常量、变量、游标、例外、复杂数据类型*/
begin
/*执行部分——要执行的pl/sql语句和sql语句*/
exception
/*例外处理部分——处理运行的各种错误*/
end;
定义部分是从declare开始的,该部分是可选的;
执行部分是从begin开始的,该部分是必须的;
例外处理部分是从exception开始的,该部分是可选的。 
pl/sql块的实例
(1). 实例1-只包括执行部分的pl/sql块

 

set serveroutput on --打开输出选项 begin dbms_output.put_line('hello'); end;   
      dbms_output是oracle所提供的包(类似java的开发包),该包包含一些过程,put_line就是dbms_output包的一个过程。  
(2). 实例2-包含定义部分和执行部分的pl/sql块 
declare v_ename varchar2(5); --定义字符串变量 begin select ename into v_ename from emp where empno=&aa; dbms_output.put_line('雇员名:'||v_ename); end;   
      如果要把薪水也显示出来,那么执行部分就应该这么写:
      select ename,sal into v_ename,v_sal from emp where empno=&aa;  
      & 表示要接收从控制台输入的变量。
(3). 实例3-包含定义部分,执行部分和例外处理部分
      为了避免pl/sql程序的运行错误,提高pl/sql的健壮性,应该对可能的错误进行处理,这个很有必要。
1.比如在实例2中,如果输入了不存在的雇员号,应当做例外处理。
2.有时出现异常,希望用另外的逻辑处理,[网示] 
相关说明:
oracle事先预定义了一些例外,no_data_found就是找不到数据的例外。 
declare --定义变量 v_ename varchar2(5); v_sal number(7,2); begin --执行部分 select ename,sal into v_ename,v_sal from emp where empno=&aa; --在控制台显示用户名 dbms_output.put_line('用户名是:'||v_ename||' 工资:'||v_sal); --异常处理 exception when no_data_found then dbms_output.put_line('朋友,你的编号输入有误!'); end; /

你可能感兴趣的:(oracle,sql,编程,exception,存储,output)