第三篇PLSQL编程
- 格式:docx
- 大小:60.25 KB
- 文档页数:12
第三章 PL/SQL编程
3.1 PL/SQL基础知识
3.1.1 什么是PL/SQL
一、什么是PL/SQL?
结合了Oracle进程语言和结构化查询语句的一种扩编语言。利用PL/SQL能够编写具有很多高级功能的程序,尽管通过量个SQL语句也能实现一样的功能,可是相较而言,PL/SQL具有更为明显的一些优势
二、在PL/SQL块中能够利用 SELECT、INSERT、UPDATE、DELETE等DML语句 、事物操纵语句和SQL函数等
。PL/SQL块不许诺直接利用 CREATE、DROP或ALTER等DDL语句
,但能够通过动态SQL来执行它们。
三、PL/SQL块的结构
声明部份
执行部份
异样处置部份
四、常量和变量的声明语法是什么?
变量:
Variable_name data_type[ (size) ] [ := init_value ];
常量:
Variable_name CONSTANT data_type := value;
。
四、完成例如1
操作步骤:
1.在jbit用户下创建表employee,导入数据
2. 执行语句
--方式一:通过SELECT INTO给变量赋值
DECLARE
v_ename VARCHAR2(20);
v_rate NUMBER(7,2);
c_rate_incr CONSTANT NUMBER(7,2):=1.10;
BEGIN
SELECT ename, sal* c_rate_incr INTO v_ename, v_rate
FROM employee
WHERE empno='7788';
添加输出显示语句,参考P81 例如2中的“DBMS_OUTPUT.PUT_LINE()”语句
DBMS_OUTPUT.PUT_LINE('姓名:'||v_ename||'工资:'||v_rate);
END;
显示结果图:(请截图)
--方式二:通过赋值操作符“:=”给变量赋值
DECLARE
v_ename VARCHAR2(20); v_rate NUMBER(7,2);
c_rate_incr CONSTANT NUMBER(7,2):=1.10;
BEGIN
v_ename:='SCOTT';
DBMS_OUTPUT.PUT_LINE('姓名:'||v_ename);
END;
显示结果图:(请截图)
3.1.2 PL/SQL数据类型
一、PL/SQL支持哪两种属性类型?请详细说明。
1 %TYPE 概念一个变量,其数据类型与和概念的某个数据变量的数据类型相一致,这时能够利用%TYPE
优势
1) 能够没必要明白所引用的数据库列的数据类型。
2) 所引用的数据库列的数据类型能够实时改变,容易维持一致,不用修改PL/SQL程序。
2 %ROWTYPE 返回一个记录类型,其数据类型和数据库表的数据结构相一致,这时能够利用%ROWTYPE
1) 能够没必要明白所引用的数据库中列的个数和数据类型。
2) 所引用的数据库中列的个数和数据库类型能够实时改变,容易维持一致,不用修改PL/SQL程序。
四、完成例如2
DECLARE
v_empno employee.empno%TYPE :=7788;
--表示与数据库表employee的empno列的数据类型一致
v_rec employee%ROWTYPE;
BEGIN
SELECT * INTO v_rec FROM employee WHERE empno=v_empno;
DBMS_OUTPUT.PUT_LINE
('姓名:'||v_rec.ename||'工资:'||v_rec.sal||'工作时刻:'||v_rec.hiredate);
END;
显示结果图:(请截图)
3.1.3 PL/SQL操纵语句
一、操纵结构共有3种类型,它们是什么?别离写出它们的语法。
1 条件操纵
IF THEN
PL/SQL 和 SQL语句
END IF; IF THEN
PL/SQL 和 SQL语句
ELSE
其他语句
END IF;
IF THEN
PL/SQL 和 SQL语句
ELSIF THEN
其他语句
ELSIF THEN
其他语句
ELSIF THEN
其他语句
ELSE
其他语句
END IF;
2 循环操纵
LOOP
要执行的语句;
EXIT WHEN
END LOOP;
WHILE LOOP
要执行的语句;
END LOOP;
FOR 循环计数器 IN [ REVERSE ] 下限…上限 LOOP 要执行的语句;
END LOOP;
3 顺序操纵
二、完成例如3
DECLARE
v_counter NUMBER := 5;
BEGIN
DBMS_OUTPUT.PUT_LINE('v_counter的当前值为:'||v_counter);
IF v_counter >= 10 THEN
NULL; --为了使语法变得成心义,去掉NULL会报语法错误
ELSE
v_counter := v_counter + 10;
DBMS_OUTPUT.PUT_LINE('v_counter的改变后值为:'||v_counter);
END IF;
END;
显示结果图:(请截图)
3.2 异样处置
用来处置正常执行进程中未预料的事件。
1 预概念异样
DECLARE
v_ename employee.ename%TYPE;
BEGIN
SELECT ename INTO v_ename
FROM employee
WHERE empno=1234; dbms_output.put_line('雇员名:'||v_ename);
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('雇员号不正确');
WHEN TOO_MANY_ROWS THEN
dbms_output.put_line('查询只能返回单行');
WHEN OTHERS THEN
dbms_output.put_line('错误号:'||SQLCODE||'错误描述:'||SQLERRM);
END;
2 自概念异样
步骤:
(1) 声明异样 e_comm_is_null EXCEPTION; --概念异样类型变量
(2) 抛出异样 RAISE e_comm_is_null;
(3)异样处置
DECLARE
v_comm employeem%TYPE;
e_comm_is_null EXCEPTION; --概念异样类型变量
BEGIN
SELECT comm INTO v_comm FROM employee WHERE empno=7788;
IF v_comm IS NULL THEN
RAISE e_comm_is_null;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('雇员不存在!错误为:'||SQLCODE||SQLERRM);
WHEN e_comm_is_null THEN
dbms_output.put_line('该雇员无补助');
WHEN others THEN dbms_output.put_line('显现其他异样');
END;
例如5
3.3 显示游标
一、游标的分类
静态游标(隐式游标和显示游标)和动态游标
二、显示游标的利用步骤:
1.声明游标
2.打开游标
3.提取游标
4.关闭游标
三、显示游标属性
P89
四、利用游标删除或更新
例如7
步骤:
1. 先查询两表的联合查询的记录
SELECT ename,sal
FROM employee e INNER join dept d
ON e.deptno=d.deptno 2. 执行例如7的代码
3. 再查询两表的联合查询的记录
截图
更新前 更新后
3.4 存储进程
一、子程序的组成
二、存储进程用法
1.存储进程的大体用法
(1)创建存储进程
(2)挪用存储进程
在PL/SQL块中的挪用
(3)存储进程的参数模式
(4)存储进程的访问权限
(5)删除存储进程
例如9
*
===========================================================
| 添加员工记录。
============================================================
*/