一、利用游标实现循环嵌套

在对oracle数据进行操作时我们会经常碰到循环甚至循环嵌套的情况。这个时候游标的作用就体现出来了。

DECLAREvId NUMBER(19);vDate DATE;--a表游标定义CURSOR a_cursor ISSELECT DISTINCT o.employeeId FROM operations o WHERE o.employeeId IS NULL ORDER BY 1;--b表游标定义CURSOR b_cursor(eid number) ISSELECT DISTINCT trunc(o.startDate) startDateFROM operations o WHERE o.employeeId = eid AND o.employeeId IS NULLORDER BY 1;
BEGIN FOR a_cur IN a_cursor LOOPvId := a_cur.receiverid;FOR b_cur IN b_cursor(vId) LOOPvDate := b_cur.startlifecycle;Employee_operationSettlement(vDate,vId);--做操作END LOOP;END LOOP;
END;

二、灵活使用%ROWTYPE

DECLARE   V_employee employees%ROWTYPE
BEGIN   SELECT * INTO V_operationFROM employees e WHERE e.code = '9999';--插入数据INSERT INTO employees (code,name,age)VALUES ('9998',V_operation.name,V_operation.age);--修改数据UPDATE employees tSET ROW = V_employeeWHERE e.code = '9999';
END; 

三、根据主键表名查询存在外键关联的表名和字段名,并查询指定主键值在外键表中关联的数据条目

DECLAREVSql VARCHAR2(256);VCount NUMBER;CURSOR a_cursor isSELECT DISTINCT B.TABLE_NAME tableName,c.column_name columnNameFROM DBA_CONSTRAINTS A, DBA_CONSTRAINTS B, USER_CONS_COLUMNS C  WHERE A.CONSTRAINT_NAME = B.R_CONSTRAINT_NAME  AND B.CONSTRAINT_TYPE = 'R'  AND a.TABLE_NAME = 'OPERATIONROLES'AND c.constraint_name = b.constraint_nameAND (instr(B.TABLE_NAME,'_')=0 OR instr(B.TABLE_NAME,'_CS')>0)--表名过滤条件(不包含‘_’,或包含‘_CS’)ORDER BY 1,2;
BEGIN FOR a_cur IN a_cursor LOOPVSql := 'SELECT count('||a_cur.columnName||') FROM '||a_cur.tableName||' WHERE '||a_cur.columnName||' = 40010';--指定值为(40010)EXECUTE IMMEDIATE VSql INTO VCount;IF VCount > 0 THEN --只看存在数据的条目DBMS_OUTPUT.put_line(VSql||'____'||VCount);--输出(SQl____对应数据条数)END IF;END LOOP;
END;

四、递归查询

--寻根
SELECT o.*
FROM PartyRoleAssociations p,ORGANIZATIONUNITS o
WHERE p.partyroleid = o.id
AND LEVEL = 1 --层级
START WITH p.associationpartyroleid = '131000755'--开始子节点ID
CONNECT BY p.associationpartyroleid = PRIOR p.partyroleid;---自顶向下
SELECT o.*
FROM PartyRoleAssociations p,ORGANIZATIONUNITS o
WHERE p.associationpartyroleid = o.id
START WITH p.associationpartyroleid = '131000161'--父级节点ID
CONNECT BY PRIOR p.associationpartyroleid = p.partyroleid;

五、通过group by和wm_concat来快速定位数据

SELECT o.employeeId, wm_concat(o.name) --行列转换
FROM operations o
GROUP BY o.employeeId;

六、依照模板数据快速插入数据,特别适用于表字段特别多的情况

DECLARE   V_employee employees%ROWTYPE;CURSOR a_cursor IS SELECT * FROM employees;
BEGIN   SELECT * INTO V_operationFROM employees e WHERE e.code = '9999';--1INSERT INTO employees (code,name,age)VALUES ('9998',V_operation.name,V_operation.age);--2V_operation.code := '9997';V_operation.name := '张三';INSERT INTO employeesVALUES V_operation;--3FOR a_cur IN a_cursor LOOPIF a_cur.code = '9999' THENa_cur.code := '9996';a_cur.name := '李四';INSERT INTO employees VALUES a_cur;END IF;END LOOP;--4INSERT INTO Employees(code, Name, age)SELECT '9995' code, --值,别名(可忽略)'王五' name,ageFROM Employees eWHERE e.code = '9999';
END;

七、快速定位存储过程

在项目开发中,经常遇到这样的情况,现在需要改动一个表、函数或者存储过程(简称为对象),但是不知道这个对象被哪些函数、定时任务或存储过程调用,便可利用以下SQL解。

SELECT DISTINCT t.type "类型", t.name "名称"
FROM User_Source t
WHERE t.type = 'PROCEDURE' --FUNCTION(函数),PROCEDURE(存储过程),TRIGGER(触发器)
AND LOWER(t.text) LIKE '%string%' --string英文小写
UNION ALL
SELECT DISTINCT 'JOB' "类型", j.JOB_NAME "名称" FROM user_scheduler_jobs j
WHERE LOWER(j.JOB_ACTION) LIKE '%string%';--查询定时任务ACTION中是否包含

八、中断ORACLE的JOB

网上查了一下,大多是通过dba_jobs_running去查SID,发现查不到,后来发现是可以通过dba_scheduler_running_jobs去查SID的

SELECT t.session_id SID FROM dba_scheduler_running_jobs t;
SELECT SID,SERIAL#  FROM V$Session WHERE SID = '1018';
ALTER SYSTEM KILL SESSION '1018,127';

Oracle开发常用知识相关推荐

  1. 微信小程序开发常用知识

    生命周期 应用的生命周期函数 onLaunch(Object object) 小程序初始化完成时触发,全局只触发一次.参数也可以使用 wx.getLaunchOptionsSync 获取. onSho ...

  2. Android TV UI开发常用知识

    导入依赖 Google官方为Android TV的UI开发提供了一系列的规范组件,在leanback的依赖库中,这里介绍一些常用的组件,使用前需要导入leanback库. implementation ...

  3. oracle开发常用,oracle开发常用关键字

    一.oracle 非空查询 1.空值与空字符串不同,判断方法也不同 判断NULL用is null 或者 is not null. 判断空字符串,要用 ="或者 <>". ...

  4. Oracle开发常用函数与存储过程

    1.输出用"."符合分隔多个作者列表 Fuc_Get_AuthorName 2.获取数据库表的主键最大值 Fuc_Get_MaxId 3.根据分割类来分割字符串 sf_split_ ...

  5. 剑破冰山—Oracle开发艺术 前言

    前言 长久以来,Oracle管理类的书籍遍地开花,并涌现出了一批优秀的实战作品,但在Oracle开发方面,却多数都是基础性的语法书籍,很少有较为深入的实战性的作品问世.久而久之,大多数人认为Oracl ...

  6. 剑破冰山:Oracle开发艺术(前言)

    前言 长久以来,Oracle管理类的书籍遍地开花,并涌现出了一批批优秀的实战作品,但在Oracle开发方面,多数都是基础性的语法书籍,很少有较为深入的实战性的作品问世.久而久之,大多数人认为Oracl ...

  7. 剑破冰山:Oracle开发艺术(目录)

    基本信息 作者: 卢涛    梁敬彬    王保强    怀晓明    贾书民 丛书名: ITPUB技术丛书 出版社:电子工业出版社 ISBN:9787121120756 上架时间:2010-11-2 ...

  8. 剑破冰山—Oracle开发艺术 内容简介

    本书是一本通过讲解Oracle 数据库开发案例来说明Oracle 数据库的功能特性.编程思路和设计方法的书籍.通过对每个案例的详细分析和讲解,使读者了解对同一类开发任务应如何做并能够领会为什么这么做, ...

  9. 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇一:WPF常用知识以及本项目设计总结...

    篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...

最新文章

  1. 报名 | 从滴滴出行数据透视中国城市空间发展讲座
  2. 残缺棋盘的伪代码_伪激光雷达:无人驾驶的立体视觉
  3. Linux下部署Kubernetes+Kubesphere(一)Kubernetes基础
  4. jboss8日志级别设置_罐中研讨会:设置JBoss BRMS全日研讨会
  5. MATLAB飞机大战第二版,windows程序设计——飞机大战札记(单文档文件登陆界面)...
  6. 一些算法(最短路,线段树,01,完全背包,STL)的基本参考资料
  7. php cpu型号,linux如何查看cpu型号?
  8. python21天打卡Day10-string和bytes互转
  9. TurboMosaic 如何制作照片马赛克效果
  10. Vue:文章新闻界面,点击上一篇下一篇界面不重新加载解决方案
  11. [Linux程序设计][调试][splint]
  12. 《人.地.城》读书笔记
  13. 【测试报告】模板:迭代测试报告
  14. MAVEN 仓库加速 阿里云镜像
  15. 国内App推广N种方法,总有几种适合你
  16. 代码检查工具!从 TSLint 到 ESLint
  17. 摄像头网页服务器,网络摄像头实现直播的方法 在网页浏览器播放等于可以在网页传播...
  18. 【更新】CVE-2020-0796:微软紧急发布SMBv3协议“蠕虫级”漏洞补丁通告
  19. Samba结合Windows AD
  20. GameBuilder开发游戏应用系列之60行代码实现FlappyBird

热门文章

  1. 总结从linux - windows 上(GCC与MSVC 2015) 移植C或者C++代码时候遇到的编译和链接问题
  2. matlab铣削,基于MATLAB的微细铣削力分析
  3. SDM For Face Alignment 流程介绍及Matlab代码实现之预处理篇
  4. wordpress漏洞_WordPress XSS漏洞可能导致远程执行代码(RCE)
  5. mysql存储过程_Mysql存储过程
  6. 微信转账一次显示两个_微信为啥分红包和转账两大功能?这4个区别你要知道,望相互转告...
  7. java的类属性默认有this 但容易与参数重名 所以需要显性的加上this 以分区别
  8. enum操作--获取枚举里的最大值
  9. 最小生成树练习1(克鲁斯卡尔算法Kruskal)
  10. 大话设计模式笔记 享元模式