这些是最简单的,理解这些再去看其他的高深一点的吧.......

游标

oracle里面的游标分为四种情况,分别是LOOP循环,FOR循环,删除,更新

1.LOOP循环

检索EMP表。使用LOOP循环语句遍历游标,输出指定部门编号(比如10)的员工信息(empno,ename,sal,deptno)

--定义游标--
DECLARE CURSOR cursor_emp (dept_no NUMBER := 10)
IS SELECT * FROM emp WHERE deptno = dept_no;
--%ROWTYPE是这个表的行的类型,与%TYPE不同--
row_emp emp%ROWTYPE;
BEGIN
OPEN cursor_emp(10);
LOOP
--下面这两行是固定模式,把游标查到的信息插入row_emp里面--
FETCH cursor_emp INTO row_emp;
EXIT WHEN cursor_emp%NOTFOUND;
--这个是输出语句,||用来分隔--
DBMS_OUTPUT.PUT_LINE('当前检索第'||cursor_emp%ROWCOUNT|| '行:员工号--'||row_emp.empno|| ',姓名--'|| row_emp.ename|| ',工资--'|| row_emp.sal|| ',部门编号--'|| row_emp.deptno);
END LOOP;
CLOSE cursor_emp;
END; --上面我们写完了LOOP类型的游标,里面有输出语句是吧,我们要想执行那语句必须加行代码--
set serverout on

2.For循环

我们还是实现上面的功能,不过这次我们使用For循环。这里不同的地方在于,For循环没有开启游标!也没有关闭游标!也没有那两句固定的语句!

DECLARE CURSOR cursor_emp(dept_no NUMBER := 10)
IS SELECT * FROM emp WHERE deptno = dept_no;
BEGIN
FOR row_emp IN cursor_emp LOOP
DBMS_OUTPUT.PUT_LINE('员工号:'||row_emp.empno||',姓名:'||row_emp.ename || ',工资:'|| row_emp.sal|| ',部门编号:'|| row_emp.deptno);
END LOOP;
END;

3.更新

使用显示游标更新emp表数据,将工资低于4000元的员工工资增加100元      (更新和删除都多一句FOR UPDATE)

DECLARE CURSOR cursor_emp
IS SELECT sal FROM emp WHERE sal < 4000
--发现没?多了一个FOR UPDATE!--
FOR UPDATE;
--这里我们定义的是%type,这个呢就是某个表行类型的一个列的类型!看emp.sal!!--
v_sal emp.sal%TYPE;
--下面还是LOOP循环里面的套路--
BEGIN
OPEN cursor_emp;
LOOP
--LOOP里面的两大固定语句,套路.......--
FETCH cursor_emp INTO v_sal;
EXIT WHEN cursor_emp%NOTFOUND;
--update语句--
UPDATE emp SET sal=sal+100 WHERE CURRENT OF cursor_emp;
END LOOP;
CLOSE cursor_emp;
END;

4.删除

删除部门号为40的所有员工

DECLARE CURSOR cursor_emp
IS SELECT * from emp WHERE deptno =40
FOR UPDATE;
row_emp emp%ROWTYPE;
BEGIN
OPEN cursor_emp;
LOOP
FETCH cursor_emp INTO row_emp ;
EXIT WHEN cursor_emp%NOTFOUND;
DELETE from emp WHERE CURRENT OF cursor_emp;
END LOOP;
CLOSE cursor_emp;
END;

函数

定义RESULT()函数计算两个数值相除结果(商和余数),使用IN-OUT参数。运行,返回20/3的结果

--定义函数--
CREATE OR REPLACE FUNCTION result(num1 NUMBER, num2 IN OUT NUMBER)
RETURN NUMBER
AS
v_result NUMBER(6);
v_remainder NUMBER;
BEGIN
v_result := FLOOR(num1 / num2);
v_remainder := MOD(num1, num2);
num2 := v_remainder;
RETURN v_result;
EXCEPTION
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE('错误信息:不能除0');
END;
--调用函数--
DECLARE
result1 NUMBER;
result2 NUMBER;
BEGIN
result2 := 3;
result1 := result(20,result2);
DBMS_OUTPUT.PUT_LINE('商是:'||result1);
DBMS_OUTPUT.PUT_LINE('余数是:'||result2);
END;

触发器

创建BEFORE触发器trig_OutPutScore,更新scores分数时显示分数变化(原来分数##,现在分数##)

CREATE OR REPLACE TRIGGER trig_OutPutScore
BEFORE UPDATE ON scores
FOR EACH ROW --每更新一行就会触发一次--
DECLARE
oldvalue NUMBER;
newvalue NUMBER;
BEGIN
oldvalue := :OLD.sscore; --更新之前的sscore的值--
newvalue := :NEW.sscore; --更新之后的sscore的值--
DBMS_OUTPUT.PUT_LINE('原来分数='||oldvalue|| ',现在分数='||newvalue);
END;

调用触发器

update scores set sscore=sscore+5;

存储过程

创建存储过程

CREATE OR REPLACE PROCEDURE proc_GetScoresBySno (no IN NUMBER, result OUT NUMBER)
AS
BEGIN
SELECT SUM(sscore) INTO result FROM scores WHERE sno = no;
END;

调用存储过程

--variable是定义全局变量的意思--
VARIABLE AllScores NUMBER;
EXEC proc_GetScoresBySno(201102,:AllScores);
PRINT AllScores;

Oracle 重要知识点的更多相关文章

  1. 【体系结构】有关Oracle SCN知识点的整理

    [体系结构]有关Oracle SCN知识点的整理 1  BLOG文档结构图   BLOG_Oracle_lhr_Oracle SCN的一点研究.pdf 2  前言部分 2.1  导读和注意事项 各位技 ...

  2. oracle 数据库——知识点总结(加示例)

    新入oracle数据库,把目前学到的知识点记录下来,可能都比较基础,但还是比较全的,里面的示例都是自己在PL/SQL中跑过的,如果有错误,还望各位大侠指出哈. 创建用户 1.创建用户(使用管理员身份创 ...

  3. 数据从mysql迁移至oracle时知识点记录(一)

    最近在做数据的迁移,再将数据从mysql迁移至oracle时,部分sql语句进行了修改,在此对部分知识点进行记录: 参考资料:https://dev.mysql.com/doc/refman/5.5/ ...

  4. Oracle 相关知识点结构图

    最近在学Oracle数据库,制作了些结构图方便记忆!主要涉及到Oracle数据类型,Oracle的表操作以及Oracle的游标,还有的之后再分享...... Oracle 数据类型 因为图片上只能看到 ...

  5. oracle数据库知识点

    1.oracle启动后的服务 1. Oracle ORCL VSS Writer Service:Oracle卷映射拷贝写入服务,VSS(Volume Shadow Copy Service)能够让存 ...

  6. oracle的知识点总结

    体系结构:数据库的体系结构是指数据库的组成.工作过程与原理,以及数据在数据库中的组织与管理机制.体系结构包括:实例(instence),数据库文件(database),用户进程(user proces ...

  7. Oracle基础知识点——Oracle服务端和客户端

    Oracle服务端 服务端提供oracle服务的实例,其是数据库的核心,用于数据库的管理,对象的管理与存储.数据的存储.查询.数据库资源的监控.监听等一些服务. 例子:比如一台机子上安装了Oracle ...

  8. oracle小知识点

    一 . procedure和function: procedure和function在语法上几乎完全一样,使用上却有小小的差别, procedure可以单独的调用 在命令行直接exec pro_xxx ...

  9. oracle 基本知识点

    //创建临时表空间create temporary tablespace test_temp tempfile 'E:\oracle\product\10.2.0\oradata\testserver ...

随机推荐

  1. Maven构建项目速度太慢的解决办法

    问题描述 通过idea新建maven项目,参数设置好后,idea自动构建maven项目时,速度很慢. 参数设置如图: 执行时间如下图: Total time为8:49,花了将近十分钟时间. 连续尝试了 ...

  2. 苹果电脑获取Android Studio的发布版SHA1和开发版SHA1

    最近开始转战安卓,准备把我在苹果上的应用也在安卓上来一波,其中就遇到一个问题就是最牛天气(iOS和微信小程序都已经有了,就差安卓的了)引用的百度的定位功能,需要填写发布版SHA1和开发版SHA1,作为 ...

  3. Loadrunner 面试常见问题

    三大组件: 脚本生成器,录制和调试脚本 . 控制台,设置运行和资源场景 结果分析器,将测试结果数据以不同的图表呈现,便于性能分析 工作原理: 录制:根据不同协议,记录下客户端和服务器二者之间的对话,生 ...

  4. Unity关于方法事件生命周期官方文档

    http://docs.unity3d.com/Manual/ExecutionOrder.html 一.组件运行的基本顺序 下图中创建类的顺序为A,B,C,A1,二运行的结果为A1,B,C,A. 可 ...

  5. "Regressing Robust and Discriminative 3D Morphable Models with a very Deep Neural Network" 解读

    简介:这是一篇17年的CVPR,作者提出使用现有的人脸识别深度神经网络Resnet101来得到一个具有鲁棒性的人脸模型. 原文链接:https://www.researchgate.net/publi ...

  6. 微软职位内部推荐-Senior SW Engineer for Application Ecosystem

    微软近期Open的职位: Job posting title: Senior Development Engineer Location: China, Beijing Division: Opera ...

  7. mysql学习(1)

    开始我们基础的mysql学习 第一部分:补充知识 1. 昨天讲到的mysql初始化密码为空,今天又get到一种新的方法 Mysql安装后需要做的 Mysql安装成功后,默认的root用户密码为空,你可 ...

  8. 1089. Insert or Merge (25)-判断插入排序还是归并排序

    判断插入排序很好判断,不是的话那就是归并排序了. 由于归并排序区间是2.4.8开始递增的,所以要判断给出的归并排序执行到哪一步,就要k从2开始枚举. 然后再对每个子区间进行一下sort即可. #inc ...

  9. mysql数据出现Unknown column 'user_uid' in 'field list' sql错误

    来源:https://blog.csdn.net/gnail_oug/article/details/53606608 在操作mysql数据库时提示com.mysql.jdbc.exceptions. ...

  10. Notes of Daily Scrum Meeting(12.19)

    今天工作进展的速度别昨天稍有提高,希望大家再接再厉!加油! 团队任务总结如下: 团队成员 今日团队工作 陈少杰 重新尝试使用get等方法进行网络连接的调试 王迪 调试搜索功能中测出的问题 金鑫 测试已 ...