博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2017-07-31(触发器,包,游标练习)
阅读量:5086 次
发布时间:2019-06-13

本文共 3003 字,大约阅读时间需要 10 分钟。

CREATE OR REPLACE TRIGGER check_emp -------创建触发器

BEFORE update OR insert OR delete ON emp
REFERENCING new AS nn old AS oo
FOR EACH ROW
WHEN (nn.sal > 2000)
BEGIN
IF INSERTING THEN
dbms_output.put_line('THE OPERATION IS INSERT');
ELSIF UPDATING THEN
dbms_output.put_line('THE OPERATION IS UPDATE');
ELSIF DELETING THEN
dbms_output.put_line('THE OPERATION IS DELETE');
ELSE
dbms_output.put_line('OTHERS OPERATION');
END IF;
END;
update emp set sal=800 where empno=7369; --------更新语句
insert into emp(empno,ename,job,sal,mgr,comm,deptno,se) -------插入语句
values(7560,'王晨','tao',6895,4589,200,20,01)

rollback;                                                  ---------------回滚

drop trigger check_e2                                               -------------------删除触发器

 

 

 

create package demo_pack ---------------创建一个包

is
deptRec dept%ROWTYPE;
FUNCTION add_dept( ---------------声明一个方法
dept_no NUMBER, dept_name VARCHAR2,
location VARCHAR2)
RETURN NUMBER;
FUNCTION remove_dept(dept_no NUMBER) -------------声明方法
RETURN NUMBER;
PROCEDURE query_dept(dept_no IN NUMBER);
END demo_pack;
CREATE PACKAGE BODY demo_pack -------------创建一个包体
IS
FUNCTION add_dept
(dept_no NUMBER, dept_name VARCHAR2, location VARCHAR2)
RETURN NUMBER
IS
empno_remaining EXCEPTION;
PRAGMA EXCEPTION_INIT(empno_remaining, -1);
BEGIN
INSERT INTO dept VALUES(dept_no, dept_name, location); ------------实现方法
IF SQL%FOUND THEN
RETURN 1;
END IF;
EXCEPTION
WHEN empno_remaining THEN
RETURN 0;
WHEN OTHERS THEN
RETURN -1;
END add_dept;

FUNCTION remove_dept(dept_no NUMBER)
RETURN NUMBER
IS
BEGIN
DELETE FROM dept WHERE deptno=dept_no;
IF SQL%FOUND THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
EXCEPTION
WHEN OTHERS THEN
RETURN -1;
END remove_dept;

PROCEDURE query_dept

(dept_no IN NUMBER)
IS
BEGIN
SELECT * INTO DeptRec FROM dept WHERE deptno=dept_no;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('数据库中没有编码为'||dept_no||'的部门');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('程序运行错误!请使用游标');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE||'----'||SQLERRM);
END query_dept;
END demo_pack;

drop package demo_pack;

DECLARE ------------调用包方法
Var NUMBER;
BEGIN
Var := demo_pack.add_dept(90,'Administration', 'Beijing');
IF var =-1 THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE||'----'||SQLERRM);
ELSIF var =0 THEN
DBMS_OUTPUT.PUT_LINE('该部门记录已经存在!');
ELSE
DBMS_OUTPUT.PUT_LINE('添加记录成功!');
Demo_pack.query_dept(90);
DBMS_OUTPUT.PUT_LINE(demo_pack.DeptRec.deptno||'---'||
demo_pack.DeptRec.dname||'---'||demo_pack.DeptRec.loc);
var := demo_pack.remove_dept(90);
IF var =-1 THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE||'----'||SQLERRM);
ELSIF var=0 THEN
DBMS_OUTPUT.PUT_LINE('该部门记录不存在!');
ELSE
DBMS_OUTPUT.PUT_LINE('删除记录成功!');
END IF;
END IF;
END;

 

 

 

 

 

DECLARE --------游标应用

v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
CURSOR c_cursor IS SELECT ename, sal FROM emp WHERE rownum<11;
BEGIN
OPEN c_cursor; ----------打开游标
FETCH c_cursor INTO v_ename, v_sal; ------------获取值
WHILE c_cursor %FOUND LOOP
DBMS_OUTPUT.PUT_LINE(v_ename||'---'||to_char(v_sal) );
FETCH c_cursor INTO v_ename, v_sal;
END LOOP;
CLOSE c_cursor; ----------关闭游标
END;

 

转载于:https://www.cnblogs.com/wgb190/p/7270259.html

你可能感兴趣的文章
Python学习资料
查看>>
jQuery 自定义函数
查看>>
jquery datagrid 后台获取datatable处理成正确的json字符串
查看>>
ActiveMQ与spring整合
查看>>
web服务器
查看>>
第一阶段冲刺06
查看>>
EOS生产区块:解析插件producer_plugin
查看>>
JS取得绝对路径
查看>>
排球积分程序(三)——模型类的设计
查看>>
HDU 4635 Strongly connected
查看>>
ASP.NET/C#获取文章中图片的地址
查看>>
Spring MVC 入门(二)
查看>>
格式化输出数字和时间
查看>>
页面中公用的全选按钮,单选按钮组件的编写
查看>>
java笔记--用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程
查看>>
BZOJ 1047 HAOI2007 理想的正方形 单调队列
查看>>
各种语言推断是否是手机设备
查看>>
这个看起来有点简单!--------实验吧
查看>>
PHP count down
查看>>
JVM参数调优:Eclipse启动实践
查看>>