2017-07-31(触发器,包,游标练习)

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;

时间: 2024-07-28 13:23:45

2017-07-31(触发器,包,游标练习)的相关文章

2017.07.31 七月最后一天

现在5点,5点半再走啊-- 今天上午没有讲新课,跟以前一样在刷题,1049题做的时间最长--下午复习了循环的有关知识,然后简单地讲了数组的有关知识.然后从1051题开始做的还算顺利,到1055题后就懵了-- 第1054题,输入n个数,要求找出n个数的最大值,并将最大的数删除后,再输出剩余的数.提示,如果有多个最大的数,那么都要删除.如果一个数也不剩下,输出"none". #include<iostream> #include<cstdio> #include&l

第一期周二航拍视频分享 2017/07/10

2017/07/10 分享方式:1.讲解航拍镜头语言 2.以一个经典视频为例讲解其中所用到的航拍语言  3.最后再看一个视频,同时大脑应思考视频中出现的镜头语言 1.讲解航拍镜头语言 航拍基本动作 直飞 1.直线向前飞,镜头向前: 这是最常用的手法之一,一般拍摄海岸线.沙漠.山脊.笔直的道路等等也多用这种手法. 画面中镜头向前移动,也可从地面慢慢抬头望向远处,镜头一气呵成. 2.直线向前飞,镜头俯瞰: 正俯的镜头常用于拍摄城市.森林,特别是一条笔直的路.一排整齐的车辆,树,房子等等. 直线向前飞

Android实现下拉导航选择菜单效果【转载地址:http://www.cnblogs.com/hanyonglu/archive/2012/07/31/2617488.html】

本文介绍在Android中如何实现下拉导航选择菜单效果.   关于下拉导航选择菜单效果在新闻客户端中用的比较多,当然也可以用在其他的项目中,这样可以很方便的选择更多的菜单.我们可以让我们的应用顶部有左右滑动或进行切换的导航菜单,也可以为了增强用户体验在应用中添加这样的下拉导航选择菜单效果. 关于它的实现原理,其实也是挺简单的,就是使用PopupWindow来进行展现,在显示时控制其高度并配置以相应的动画效果.在PopupWindow中我使用GridView来控制里面的菜单项,每个菜单项对应相应的

日本IT行业劳动力缺口达22万 在日中国留学生迎来就业好时机 2017/07/18 11:25:09

作者:倪亚敏 来源:日本新华侨报 发布时间:2017/07/18 11:25:09   据日本政府提供的数据,日本2018年应届毕业生的"求人倍率"已经达到了1.78倍.换言之,就是100名大学生里有178个就业岗位可选择,即使所有大学毕业生都进入劳动力市场,也还有78个岗位空缺.劳动力现状是寒冷冬天,而学生们确实迎来了就业春天. 在众多岗位当中,日本的信息技术(IT)领域采用的外国人留学生最多.去年,已经在日本企业就职的留学生当中(除去制造行业),27.3%的毕业生进入了IT行业.根

【谜客帝国】第110届云月(庄若云&amp;月思)合擂谜会(2017.07.30)

 [谜客帝国]第110届云月(庄若云&月思)合擂谜会(2017.07.30) 主持:瓷    计分:手手 1.“接天帆影入残云”(10笔字)蚕/月思 [注:面出陈德永<客居月余归后寄友人>.残云,别解提音.] 2.“西风长笛水边楼”(9笔字)洙/月思 [注:面出张养浩<黄州道中>:长笛,象形“一”.] 3. 河间元琛最豪首(2字铁道线路名)玉昌/月思 [注:典据<洛阳伽蓝记>,“而河间王(元)琛最为豪首”:青海玉树州至西藏昌都市的铁路线称为“玉昌线”.] 4. 

T-SQL应用,视图、存储过程、触发器、游标、临时表等

sqlserver常用操作: 视图.存储过程.触发器.函数 --*********************批处理********************* --[在一个批处理中存有一个语法错误,则所有的语句都无法通过编译] USE flowershopdb SELECT * FROM tb_category SELECT * FROM tb_detailed SELECT * FROM tb_product SELECT * FROM tb_shopping SELECT * FROM tb_u

触发器结合游标删除关联表数据

USE [数据库] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO --MODIFY BY 删除触发器--基本表删除数据时,把对应的调价信息一并清除 ALTER trigger [dbo].[tg_deleteSBMC] on [dbo].[SBMC] for delete as Declare @sbmcbh varchar(20),@store varchar(4) begin declare cur_delsbmc cursor fo

以学生表实例来补充 触发器和游标操作

这是学生表里面的内容: 现在创建一个Avgtable表: select Sno, AVG(Grade) avgGrade into Avgtable from SCgroup by Sno --情况是这样子的:--当向SC表中做插入操作的时候,插入数据的时候 Avgtable表是要改变数据的:-- 1.当插入Avgtable表中目前没有的学生的数据的时候就直接插入-- 2.当插入Avgtable表中已经有的学生的数据的时候就要求要改变avgGrade的值--触发器做插入的时候: alter tr

SQL Server 存储过程、触发器、游标

存储过程 1.存储过程是事先编好的.存储在数据库中的程序,这些程序用来完成对数据库的指定操作. 2.系统存储过程: SQL Server本身提供了一些存储过程,用于管理有关数据库和用户的信息. 用户存储过程: 用户也可以编写自己的存储过程,并把它存放在数据库中,供客户端调用. 3.这样安排的主要目的就是要充分发挥数据库服务器的功能,尽量减少网络上的堵塞. 4.系统存储过程 概念: 它的目的在于能够方便地从系统表中查询信息,或者完成与更新数据库表相关的管理任务或其它的系统管理任务. 系统存储过程可

麦客孤独苹果发烧友论坛 2017.5.31每日软件更新列表

SAASPASS For macOS 为电脑系统加上两步验证软件http://www.macfans.org/thread-23346-1-1.html 索恩的秩序:国王的挑战 Order of the Thorne The Kings Challenge 2.0.0.1 Mac 原生破解版角色扮演游戏http://www.macfans.org/thread-23347-1-1.html Tipard All Music Converter 3.8.31 独家中文汉化破解版 Mac 音频格式转