n  介绍

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

n  块结构示意图

pl/sql块由三个部分构成:定义部分、执行部分、例外处理部分,如下所示:

 
   

n  案例1--只包括执行部分的pl/sql块。

案例:输出hello,world

☞相关说明:

dbms_output是oracle所提供的包(类似java的开发包),该包包含一些过程,put_line就是dbms_output包的一个过程。

SQL>
set serveroutput on;  //打开控制台显示,默认不输出,需要执行此命令才会输出显示

SQL>

SQL>
begin

2   
dbms_output.put_line('hello,world');

3   
end;

4  /

hello,world

PL/SQL
procedure successfully completed

n  案例2--包括定义部分和执行部分的pl/sql块。

案例:根据用户输入的雇员编号,显示该雇员的名字

☞相关说明:

&
表示要接收从控制台输入的变量

‖表示把两个串拼接

declare  --定义变量的格式:变量名称  变量的类型

v_ename varchar2(8);

begin

select
ename into
v_ename from
emp where
empno=&empno;--把查询的ename值放入v_ename变量

---输出v_ename

dbms_output.put_line('雇员名是:'||v_ename);

end;

雇员名是:SMITH

PL/SQL
procedure successfully completed

将其改为过程

SQL>
create procedure pro3(in_empno number) is

2   
v_ename varchar2(8);

3   
begin

4     
select ename into v_ename from emp where empno=in_empno;

5     
dbms_output.put_line('雇员名是:'||v_ename);

6     
end;

7  /

Procedure
created

SQL>
exec pro3(7369);

雇员名是:SMITH

PL/SQL
procedure successfully completed

n  案例3--包括定义部分和执行部分和例外处理部分。

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

①比如在案例2中,如果输入了不存在的雇员号,应当做例外处理

②有时出现异常,希望用另外的逻辑处理,比如:如果不存在就加入编号为1,名字为‘马大哈’这么一个人。

我们看看如何完成①的要求

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

SQL> declare

2   
v_ename varchar2(8);

3   
begin

4     
select ename into v_ename from emp where empno=&empno;

5     
dbms_output.put_line('雇员名是:'||v_ename);

6   
exception

7       when no_data_found then

8        
dbms_output.put_line('朋友,你输入的编号有误');

9   
end;

10  /

朋友,你输入的编号有误

PL/SQL procedure successfully
completed

对该案例的细节说明:这里我们涉及到异常处理,

异常处理的基本语法:

exception

when 异常的名称
then

//对异常进行处理的代码......

//对异常进行处理的代码......

when 异常的名称2
then

//对异常进行处理的代码......

end;

oracle提供的异常有:(参考pl/sql官方文档)大概23种

有时可以利用异常来进行业务处理。比如:如果不存在就加入编号为1,名字为‘马大哈’这么一个人。

SQL> declare

2   
v_ename varchar2(8);

3   
begin

4     
select ename into v_ename from emp where empno=&empno;

5     
dbms_output.put_line('雇员名是:'||v_ename);

6   
exception

7      
when no_data_found then

8        
dbms_output.put_line('朋友,你输入的编号有误!我帮你加入一条');

9        
insert into emp (empno,ename) values(1,'马大哈');

10   
end;

11  /

朋友,你输入的编号有误!我帮你加入一条

PL/SQL procedure successfully
completed

pl/sql基础知识—pl/sql块介绍的更多相关文章

  1. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  2. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  3. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  4. [SQL] SQL 基础知识梳理(四) - 数据更新

    SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...

  5. [SQL] SQL 基础知识梳理(五) - 复杂查询

    SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...

  6. [SQL] SQL 基础知识梳理(六)- 函数、谓词、CASE 表达式

    SQL 基础知识梳理(六)-  函数.谓词.CASE 表达式 目录 函数 谓词 CASE 表达式 一.函数 1.函数:输入某一值得到相应输出结果的功能,输入值称为“参数”,输出值称为“返回值”. 2. ...

  7. [SQL] SQL 基础知识梳理(七)- 集合运算

    SQL 基础知识梳理(七)- 集合运算 目录 表的加减法 联结(以列为单位) 一.表的加减法 1.集合:记录的集合(表.视图和查询的执行结果). 2.UNION(并集):表的加法 -- DDL:创建表 ...

  8. 常见SQL语句和SQL基础知识

    引自:http://blog.csdn.net/u012467492/article/details/46790205 SQL语句考察(一) 1.查询出每门课都大于80 分的学生姓名 name   k ...

  9. [SQL基础教程]1-4 SQL 表的创建

    [SQL基础教程]1-4 SQL 表的创建 创建数据库 语法 CREATE DATABASE <数据库名称> // example CREATE DATABASE shop; 创建表 语法 ...

随机推荐

  1. 矩阵快速幂2 3*n铺方格

    #include <iostream> #include <cstdlib> #include <cstring> #include <queue> # ...

  2. notes 摘自陶哲轩演讲

    摘自陶哲轩演讲http://www.youku.com/playlist_show/id_5267259.htmlA frog in a well 井底之蛙 Aristotle        亚里士多 ...

  3. request.getSession().getServletContext().getRealPath("upload/" ); 获取不到 tomcat 服务器目录

    上传一个文件,找不到该文件的位置 设置上传的文件是在项目中的话 可以通过查找项目的路径锁定上传的文件路径 解决步骤: 可以通过jsp页面 打印获取项目的物理路径 控制台即可输出项目路径 这只是找了了上 ...

  4. redis学习笔记05-发布订阅模式

    由于redis消息队列并不支持多播机制,即生产者产出一次,由中间件复制发送给多个消费者的机制,为了弥补这个不足,单独引入了发布订阅模式的模块.使用方式如下: #生产者 import redis cli ...

  5. vscode, eslint, prettier, vetur冲突及解决

    这3工具都必须安装. 但是安装之后, 规则冲突又让人头疼. 讲下解决方案吧.一 从0开始1. 禁止工作区插件, 如下图:  2. 清空用户设置(Code–>首选项–>设置–>[右上角 ...

  6. js 之观察者模式

    观察者模式又叫发布订阅模式(Publish/Subscribe),它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生变化时就会通知所有的观察者对象,使得它们能够自 ...

  7. 数字统计类题目的非数位DP解法

    ZJOI2010 数字统计 上题题意为求[l,r]区间中每个数字(0~9)出现的次数 一般的做法为将区间当成[0,r]-[0,l-1],然后进行数位DP 但事实上将区间当成[0,r]-[0,l-1]后 ...

  8. layui -page 分页类

    <?phpnamespace page; // +---------------------------------------------------------------------- / ...

  9. tr的display属性出现td的colspan无效问题

    http://www.aichengxu.com/other/9262680.htm 今天在做项目的时候发现用javascript控制 tr 的显示隐藏时,当把tr的显示由“display:none” ...

  10. 常用web字体的使用指南

    而真正的挑战在于中文字体,由于中文字体组成的特殊性导致其体积过于庞大,除了操作系统内置的字体之外,我们很难在网站上应用其他的字体.在可选性很差的前提之下,如何正确的使用中文字体呢? 首先,以下的字体声 ...