我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈
优 质 教 程 推 荐:👉👉 Python爬虫从入门到入狱系列 合集👈👈
PL-SQL编程—块
- 块
- 课外小练习
块
-
块(block)是pl/sql的基本程序单元,编写pl/sql程序实际上就是编写pl/sql块。要完成相对简单的应用功能,可能只需要编写一个pl/sql块;但是如果要实现复杂的功能,可能需要在一个pl/sql块中嵌套其他的pl/sql块。
-
块结构示意图
- pl/sql块由三部分构成:定义部分、执行部分、例外处理部分
decleare /*定义部分:定义常量、变量、游标、例外、复杂数据类型*/ begin /*执行部分:要执行的pl/sql语句和sql语句*/ exception /*例外处理部分:处理运行的各种错误*/ end;
-
定义部分从declare开始,该部分可选
-
执行部分从begin开始,该部分必须
-
例外处理部分从exception开始,该部分可选
-
pl/sql块实例部分
-
实例1:只包括执行部分的pl/sql块
set serveroutput on --打开输出选项 set serveroutput off --关闭输出选项 -- 最简单的块内容开始 begin dbms_output.put_line('Hello world'); end; -- 说明:dbms_output是oracle所提供的包。该包包含一些过程,put_line就是dbms_output包的一个过程
-
set serveroutput on:执行之后会打印结果
-
set serveroutput off:执行之后不会打印结果
-
实例2:包含定义部分和执行部分的pl/sql、块
declare --定义变量 v_ename varchar2(5); begin --执行过程 select ename into v_ename from emp where empno=&no; --将结果输出到控制台 dbms_output.put_line('员工姓名:'||v_ename); end;
- 语句解释
select ename into v_ename from emp where empno=&no;
-
empno=&no:&地址符表示此处的内容从控制台输入获取(no是自己取得变量名)
-
into v_ename:将查询到的结果存储到v_ename这个变量中
-
追加:查询多个信息(员工编号、姓名、工资)
declare --定义变量 v_ename varchar2(5); v_empno varchar2(4); v_sal number(7,2); begin --执行过程 select ename,empno,sal into v_ename,v_empno,v_sal from emp where empno=&no; --将结果输出到控制台 dbms_output.put_line('员工编号:'||v_empno||' |员工姓名:'||v_ename||' |工资待遇:'||v_sal); end;
-
实例3:包含定义部分、执行部分和例外处理部分的pl/sql块
- 为了避免pl/sql程序的运行错误,提高pl/sql的健壮性,应该对可能得错误进行处理
- 比如实例2中,如果输入了不存在的员工编号,就应该做例外处理
- 相关说明:oracle实现预定义了一些例外,no_data_found就在找不到数据的例外
declare --定义变量 v_ename varchar2(5); v_empno varchar2(4); v_sal number(7,2); begin --执行过程 select ename,empno,sal into v_ename,v_empno,v_sal from emp where empno=&empno; --将结果输出到控制台 dbms_output.put_line('员工编号:'||v_empno||' |员工姓名:'||v_ename||' |工资待遇:'||v_sal); exception --异常处理 when no_data_found then dbms_output.put_line('员工编号有误,请重新输入!'); end;
课外小练习
-
修改打印格式,让输出更美观
declare --定义变量 v_ename varchar2(5); v_empno varchar2(4); v_sal number(7,2); begin --执行过程 select ename,empno,sal into v_ename,v_empno,v_sal from emp where empno=&empno; --将结果输出到控制台 dbms_output.put_line('员工编号'||' |员工姓名'||' |工资待遇'); dbms_output.put_line(rpad(v_empno,8,' ')||' |'||rpad(v_ename,8,' ')||' |'||rpad(v_sal,8,' ')); exception --异常处理 when no_data_found then dbms_output.put_line('员工编号有误,请重新输入!'); end;