设为首页 加入收藏

TOP

Oracle备忘录1(五)
2015-11-21 01:32:56 来源: 作者: 【 】 浏览:9
Tags:Oracle 备忘录
||',他的薪水是:'||v_sal); --异常处理 EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('输入有误,请重新输入!'); END; / 案例 CREATE PROCEDURE a1(a1name VARCHAR2,a1sal NUMBER) IS BEGIN --执行,根据故原名修改工资 UPDATE EMP SET sal=a1sal WHERE ename=a1name; END; / EXEC a1('SCOTT',150);--这样SCOTT的工资就被修改成了150 --采用function来查询某个雇员的工资 CREATE FUNCTION fj_fun1(fjname VARCHAR2) RETURN NUMBER IS yearsal NUMBER(7,2); BEGIN --执行部分 SELECT sal*12+NVL(comm,0)*12 INTO yearsal FROM EMP WHERE ename=fjname; RETURN yearsal; END; / --调用 VAR abc NUMBER; CALL fj_fun1('SCOTT') INTO:abc; --创建包。声明该包有一个过程update_sal,声明该包有一个函数annual_income: CREATE PACKAGE fj_package IS PROCEDURE update_sal(name VARCHAR2,newsal NUMBER); FUNCTION annual_income(name VARCHAR2) return NUMBER; END; / --给包sp_package实现包体 ,来修改某个雇员的工资或者查询某个雇员的工资 CREATE OR REPLACE PACKAGE BODY fj_package IS PROCEDURE update_sal(name VARCHAR2, newsal NUMBER) IS BEGIN UPDATE EMP SET sal = newsal WHERE ename = name; END; FUNCTION annual_income(name VARCHAR2) RETURN NUMBER IS annual_salary NUMBER; BEGIN SELECT sal * 12 + NVL(comm, 0) INTO annual_salary FROM EMP WHERE ename = name; RETURN annual_salary; END; END; / --调用 CALL fj_package.update_sal('SCOTT', 1400); --输入员工号,显示雇员姓名、工资、个人所得税,税率为0.03为例 DECLARE c_tax_rate NUMBER(3,2):=0.03; v_name VARCHAR2(5);--EMP.ename%TYPE v_sal NUMBER(7,2);--EMP.sal%TYPE v_tax_sal NUMBER(7,2); BEGIN --执行 SELECT ename,sal INTO v_name,v_sal FROM EMP WHERE EMPno=&no; --计算个人所得税 v_tax_sal:=v_sal*c_tax_rate;--注意冒号 --输出 DBMS_OUTPUT.PUT_LINE('雇员是:'||v_name||',工资是:'||v_sal||',需要交的个人所得税是:'||v_tax_sal); END; / --类似于高级语言中的结构体 --PL/SQL记录实例 DECLARE --表示要定义一个PL/SQL记录类型 EMP_record_type,类型包含name,salary,title TYPE EMP_record_type IS RECORD( name EMP.ename%TYPE, salary EMP.sal%TYPE, title EMP.job%TYPE ); --定义了一个变量,这个变量的类型是EMP_record_type fj_record EMP_record_type;--v_name VARCHAR2(45); BEGIN SELECT ename,sal,job INTO fj_record FROM EMP WHERE EMPno=7788; DBMS_OUTPUT.PUT_LINE('员工名:'||fj_record.name||',工资是:'||fj_record.salary); END; / --相当于高级语言中的数组 DECLARE --定义了一个PL/SLQL表类型,该类型是用于存放EMP.ename%TYPE TYPE fj_TABLE_type IS TABLE OF EMP.ename%TYPE INDEX BY BINARY_INTEGER;--代表下标是按整数排序的,可以为负数 fj_TABLE fj_TABLE_type; BEGIN SELECT ename INTO fj_TABLE(0) FROM EMP WHERE EMPno=7788; DBMS_OUTPUT.PUT_LINE('员工名:'||fj_TABLE(0));--下标跟上面的下标一样 END; / DECLARE --定义了一个PL/SLQL表类型,该类型是用于存放EMP.ename%TYPE TYPE fj_TABLE_type IS TABLE OF EMP.ename%TYPE INDEX BY BINARY_INTEGER;--代表下标是按整数排序的,可以为负数 fj_TABLE fj_TABLE_type; BEGIN SELECT ename INTO fj_TABLE(0) FROM EMP; DBMS_OUTPUT.PUT_LINE('员工名:'||fj_TABLE(0));--下标跟上面的下标一样 END; / --输入部门号,显示该部门所有员工姓名和他的工资 DECLARE --定义游标类型fj_EMP_cursor TYPE fj_EMP_cursor IS REF CURSOR; --定义游标变量 test_cursor fj_EMP_cursor; --定义变量 v_ename EMP.ename%TYPE; v_sal EMP.sal%TYPE; BEGIN --执行 --把test_cursor和一个SELECT结合 OPEN test_cursor FOR SELECT ename,sal FROM EMP WHERE deptno=&no; --循环取出 LOOP FETCH test_cursor INTO v_ename,v_sal; --判断是否test_cursor是否为空 EXIT WHEN test_cursor%NOTFOUND; DBMS_OUTPUT.PUT_LINE('雇员名是:'||v_ename||',薪水'||v_sal); END LOOP; END; / --在上面的基础上,如果某个雇员的工资低于200元,就增加100元 DECLARE --定义游标类型fj_EMP_cursor TYPE fj_EMP_cursor IS REF CURSOR; --定义游标变量 test_cursor fj_EMP_cursor; --定义变量 v_ename EMP.ename%TYP
首页 上一页 2 3 4 5 下一页 尾页 5/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇关于Oracle实时数据库的优化思路 下一篇ORACLE逻辑备份与恢复

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: