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). 创建过程
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块
dbms_output是oracle所提供的包(类似java的开发包),该包包含一些过程,put_line就是dbms_output包的一个过程。
(2). 实例2-包含定义部分和执行部分的pl/sql块
如果要把薪水也显示出来,那么执行部分就应该这么写:
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就是找不到数据的例外。