源码-Oracle数据库管理-第十二章-使用PL/SQL创建Oracle程序-Part 1(PL/SQL基础)

来源:互联网 发布:网络女神小茉莉 编辑:程序博客网 时间:2024/05/21 04:40

PL/SQL编程在之前专门学过,这次当做复习了。

--第12章 使用PL/SQL创建Oracle程序--12.1 PL/SQL基础--代码12.1 使用PL/SQL进行职位调整DECLARE  --定义变量  v_newjob VARCHAR2(20);  v_ename  VARCHAR(20) :='李明';BEGIN  v_newjob:='工程师';  --1,更新员工李明的职位  UPDATE emp SET job = v_newjob WHERE ename = v_ename;  --2,判断刚才的UPDATE是否执行成功  IF SQL%NOTFOUND THEN  --3,如果没有执行成功,    INSERT INTO emp      (empno, ename, job, hiredate, sal, deptno)    VALUES      (8000, v_ename, v_newjob, SYSDATE, 3000, 20);  END IF;  --4,提交事务  COMMIT;END;select * from emp;delete from emp where ename='李明';--12.2 与SQL语言整合--下面的语句块来创建一个表emp_his;--代码12.2 在PL/SQL中执行DDL语句(直接调用,会触发异常)BEGIN  CREATE TABLE emp_his AS SELECT * FROM emp;END;--代码12.2 在PL/SQL中执行DDL语句(使用动态SQL,可正确执行)DECLARE   v_SQL VARCHAR2(100);         --定义字符串变量,用来保存SQL语句BEGIN  v_SQL:='CREATE TABLE emp_his AS SELECT * FROM emp';  EXECUTE IMMEDIATE v_SQL;    --执行动态SQL语句,成功创建表  END;select * from emp_his;--移除emp_hisDROP TABLE emp_his;DECLARE   v_SQL VARCHAR2(100);         --定义字符串变量,用来保存SQL语句  v_emp_his_count NUMBER;BEGIN  v_SQL:='CREATE TABLE emp_his AS SELECT * FROM emp';  EXECUTE IMMEDIATE v_SQL;  --SELECT COUNT(*) INTO v_emp_his_count FROM emp_his;END;--12.1.3 提高程序性能--12.1.4 模块化应用程序设计--代码12.3 员工管理系统包规范设计CREATE OR REPLACE PACKAGE emppkg IS  -- 作者  : ADMINISTRATOR  -- 创建日期 : 2013-1-27 16:08:18  -- 功能 : 管理员工、部门和薪资  -- 公共函数,提供员工调薪比率  FUNCTION get_sal_ratio(p_job VARCHAR2) RETURN NUMBER;  --添加新的员工  PROCEDURE add_employee(empno VARCHAR2,ename VARCHAR2,sla NUMBER,comm NUMBER,deptno NUMBER) ;   --添加新的部门  PROCEDURE add_dept(deptno VARCHAR2,dname VARCHAR2,LOC VARCHAR2);END emppkg;/--代码12.4 员工管理系统包体实现CREATE OR REPLACE PACKAGE BODY emppkg IS  --获取调薪比率的函数  FUNCTION get_sal_ratio(p_job VARCHAR2) RETURN NUMBER AS    v_result NUMBER(7, 2);  BEGIN    IF p_job = '职员' THEN      --如果为职员,加薪10%      v_result := 0.10;    ELSIF p_job = '销售人员' THEN      --如果为销售职员,加薪12%      v_result := 0.12;    ELSIF p_job = '经理' THEN      --如果为经理,加薪15%      v_result := 0.15;    ELSE      --否则,加薪8%      v_result := 0.08;    END IF;    RETURN v_result;  END get_sal_ratio;  --添加新的员工    PROCEDURE add_employee(empno  VARCHAR2,                         ename  VARCHAR2,                         sla    NUMBER,                         comm   NUMBER,                         deptno NUMBER)  AS                          BEGIN      NULL;  END add_employee;  --添加新的部门  PROCEDURE add_dept(deptno VARCHAR2, dname VARCHAR2, LOC VARCHAR2)  AS  BEGIN      NULL;   END add_dept;END emppkg;/--代码12.5 创建员工对象(执行过程中遇到错误:ORA-02303)CREATE OR REPLACE TYPE emp_obj AS OBJECT (   empno    NUMBER (4),                                        --员工编号属性   ename    VARCHAR2 (10),                                    --员工名称属性   job      VARCHAR (9),                                        --员工职别属性   sal      NUMBER (7, 2),                                       --员工薪水属性   deptno   NUMBER (2),                                         --部门编号属性   --加薪方法   MEMBER PROCEDURE addsalary (ratio NUMBER));--定义对象类型体,实现对象方法CREATE OR REPLACE TYPE BODY emp_objAS   --实现对象方法   MEMBER PROCEDURE addsalary (ratio NUMBER)   IS   BEGIN      sal := sal * (1 + ratio);                                          --加上特定比例的薪水   END;END;

0 0
原创粉丝点击