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

游标

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

1.LOOP循环

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

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

2.For循环

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

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

3.更新

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

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

4.删除

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

  1. DECLARE CURSOR cursor_emp
  2. IS SELECT * from emp WHERE deptno =40
  3. FOR UPDATE;
  4. row_emp emp%ROWTYPE;
  5. BEGIN
  6. OPEN cursor_emp;
  7. LOOP
  8. FETCH cursor_emp INTO row_emp ;
  9. EXIT WHEN cursor_emp%NOTFOUND;
  10. DELETE from emp WHERE CURRENT OF cursor_emp;
  11. END LOOP;
  12. CLOSE cursor_emp;
  13. END;

函数

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

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

触发器

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

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

调用触发器

  1. update scores set sscore=sscore+5;

存储过程

创建存储过程

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

调用存储过程

  1. --variable是定义全局变量的意思--
  2. VARIABLE AllScores NUMBER;
  3. EXEC proc_GetScoresBySno(201102,:AllScores);
  4. 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. Windows下面的常用的快捷键

    最小化的快捷键: 最小化当前窗口:Alt+ESC 还原刚刚最小化的窗口:Alt+Tab(次快捷键组合可以在多个窗口中切换) 显示桌面,切换之前的桌面:Win+D   在浏览器页面之间切换:Ctrl+T ...

  2. springboot 设置 session 过期时间

    application.properties server.session.timeout=86400 #单位(s) 这里是24小时

  3. CSS快速入门-基本选择器

    1.标签选择器 通过标签进行元素选择. <style> a { font-size:10px; color:red; } </style> 2.* *代表通配符,匹配任意标签, ...

  4. stl源码剖析 详细学习笔记 空间配置器

    //---------------------------15/04/05---------------------------- /* 空间配置器概述: 1:new操作包含两个阶段操作 1>调 ...

  5. Azure 基础:File Storage

    Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在前文中介绍了 Blob Storage 的基本用 ...

  6. Runtime.getRuntime().addShutdownHook(Thread thread) 程序关闭时钩子,优雅退出程序

    根据 Java API, 所谓 shutdown hook 就是已经初始化但尚未开始执行的线程对象.在Runtime 注册后,如果JVM要停止前,这些 shutdown hook 便开始执行.也就是在 ...

  7. nodejs 监控代码变动实现ftp上传

    被动模式下 //https://www.npmjs.com/package/watch //文件同步功能 var watch = require('watch'); var path = requir ...

  8. WebSplider在线爬虫

    WebSplider是什么? WebSplider在线爬虫是一个结合Web技术与爬虫技术的项目. WebSplider支持Web页面进行爬虫配置,提交配置到服务器后,服务器端爬虫程序进行数据抓取,最后 ...

  9. LintCode——合并排序数组II

    描述:合并两个排序的整数数组A和B变成一个新的数组 样例:给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6] 1.Python:先将数组B加到数组A之后,然后 ...

  10. Codejam Qualification Round 2019

    本渣清明节 闲里偷忙 做了一下codejam 水平不出意外的在投稿之后一落千丈 后两题的hidden test竟然都挂了 A. Foregone Solution 水题,稍微判断一下特殊情况(比如10 ...