您的位置:首页 > 数据库 > Oracle

源码-Oracle数据库管理-第十二章-使用PL/SQL创建Oracle程序-Part 2(PL/SQL语言概览)

2016-10-25 15:16 781 查看
这部分很基础。

--12.2 PL/SQL语言概览
--12.2.1 PL/SQL块

--代码12.6 最简单的PL/SQL匿名块
BEGIN
NULL; --最简单的PL/SQL语句块
END;

--代码12.7 完整的PL/SQL语句块
DECLARE
v_deptcount NUMBER (2); --定义员工记数器变量
v_deptno NUMBER (2) := 94; --定义并为变量赋初值
BEGIN
--查询v_deptno变量所代表的员工编号是否存在
SELECT COUNT (1)
INTO v_deptcount
FROM dept
WHERE deptno = v_deptno;
IF v_deptcount = 0 --如果记录数等于0,表示无此编号的部门
THEN
INSERT INTO dept
VALUES (v_deptno, '财务部', '深圳'); --执行插入操作
--写入屏幕信息
DBMS_OUTPUT.put_line ('成功插入部门资料!');
commit;
END IF;
EXCEPTION --异常处理块
WHEN OTHERS
THEN --如果出现任何异常
DBMS_OUTPUT.put_line ('部门资料插入失败'); --显示异常信息
END;

select distinct deptno from dept;

select * from dept;

--12.2.2 嵌套块
--代码12.8 PL/SQL嵌套块示例
DECLARE
v_deptcount NUMBER (2); --定义记录数变量
v_deptno NUMBER (2) := 1; --定义并为变量赋初值
v_deptname VARCHAR2 (12);
BEGIN
--内部嵌套块
BEGIN
SELECT dname
INTO v_deptname
FROM dept
WHERE deptno = v_deptno; --在嵌套块中可以直接使用外部块中定义的变量
EXCEPTION --异常处理区
WHEN NO_DATA_FOUND THEN --捕掉异常
DBMS_OUTPUT.put_line ('您查询的部门不存在');
RAISE;
END;
--内部嵌套块
DECLARE
v_loc VARCHAR2 (20) := '深圳罗湖'; --在子块中定义变量
BEGIN
--执行插入操作
UPDATE dept
SET loc = v_loc
WHERE deptno = v_deptno;
--写入屏幕信息
DBMS_OUTPUT.put_line ('在内部嵌套块中成功更新部门资料!');
END;
EXCEPTION --异常处理块
WHEN NO_DATA_FOUND
THEN --如果出现任何异常
BEGIN --在异常处理块内部嵌套块
INSERT INTO dept
VALUES (v_deptno, '财务部', '深圳');
DBMS_OUTPUT.put_line ('在异常处理嵌套块成功插入部门资料!');
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (SQLERRM); --如果在嵌套块中出现异常,输出SQL错误消息
END;
END;

--代码12.9 使用命名块

DECLARE
v_deptcount NUMBER (2); --定义记录数变量
v_deptno NUMBER (2) := 90; --定义并为变量赋初值
v_deptname VARCHAR2 (12);
BEGIN
<<获取部门名称的块>>
BEGIN
SELECT dname
INTO v_deptname
FROM dept
WHERE deptno = v_deptno; --在嵌套块中可以直接使用外部块中定义的变量
EXCEPTION --异常处理区
WHEN NO_DATA_FOUND THEN --捕掉异常
DBMS_OUTPUT.put_line ('您查询的部门不存在');
RAISE;
END;
<<更新部门地址的块>>
DECLARE
v_loc VARCHAR2 (20) := '深圳罗湖'; --在子块中定义变量
BEGIN
--执行插入操作
UPDATE dept
SET loc = v_loc
WHERE deptno = v_deptno;
--写入屏幕信息
DBMS_OUTPUT.put_line ('在内部嵌套块中成功更新部门资料!'||更新部门地址的块.v_loc);
END;
EXCEPTION --异常处理块
WHEN NO_DATA_FOUND
THEN
<<异常处理嵌套块>> --如果出现任何异常
BEGIN --在异常处理块内部嵌套块
INSERT INTO dept
VALUES (v_deptno, '财务部', '深圳');
-- DBMS_OUTPUT.put_line ('在异常处理嵌套块成功插入部门资料!'||更新部门地址的块.v_loc);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (SQLERRM); --如果在嵌套块中出现异常,输出SQL错误消息
END;
END;

--12.2.3 变量和数据类型
--代码12.10 定义标量变量
DECLARE
part_number NUMBER(6); --SQL数据类型
part_name VARCHAR2(20); --SQL数据类型
in_stock BOOLEAN; --仅PL/SQL使用的数据类型
part_price PLS_INTEGER; --仅PL/SQL使用的数据类型
part_description VARCHAR2(50); --SQL数据类型
hours_worked INTEGER := 40; --定义变量并赋初值
employee_count INTEGER NOT NULL := 0; --定义变量并指定NOT NULL约束
hire_date DATE DEFAULT SYSDATE; --使用DEFAULT关键字指定初始值
BEGIN
NULL;
END;

--代码12.11 使用赋值运算符为变量赋值
DECLARE
part_number NUMBER(6); --SQL数据类型
part_name VARCHAR2(20); --SQL数据类型
in_stock BOOLEAN; --仅PL/SQL使用的数据类型
part_price PLS_INTEGER; --仅PL/SQL使用的数据类型
part_description VARCHAR2(50); --SQL数据类型
hours_worked INTEGER := 40; --定义变量并赋初值
employee_count INTEGER NOT NULL := 0; --定义变量并指定NOT NULL约束
hire_date DATE DEFAULT SYSDATE; --使用DEFAULT关键字指定初始值
BEGIN
part_number:=38;
part_name:='水管';
in_stock:=True;
part_price:=100/part_number;
part_description:='镀银软管';
DBMS_OUTPUT.put_line(part_number||CHR(13)||part_price);
END;

--代码12.12 使用select into 语句为变量赋值
DECLARE
v_sal emp.sal%TYPE; --定义3个与emp表中相应列相同类型的变量
v_empno emp.empno%TYPE;
v_deptno emp.deptno%TYPE;
BEGIN
SELECT empno, sal, deptno --使用SELECT INTO为变量赋值
INTO v_sal, v_empno, v_deptno
FROM emp
WHERE empno = 7369;
EXCEPTION --避免TOO_MANY_ROWS异常,这里进行了捕捉
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.put_line('返回了多行数据');
END;

--常量的定义
DECLARE
program_title constant varchar2(50) := 'PL/SQL编程你会吗?';
BEGIN
DBMS_OUTPUT.put_line(program_title);
END;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐