Oracle开发常用知识

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

在对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';

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

条件控制(if ) ( case)

一:IF应用格式 (1)                  (2)                (3) IF 条件 THEN           IF 条件 THEN            IF 条件1 THEN --代码块               --代码块          …

使用临时表解决union和order by不能同时使用的问题

最近遇见了这样一个问题,有4张表,A(单据)表,B(产品)表,C(产品类型),D(单据产品关联表)。 B表有唯一对应的类型C&#xff…

2.3线性表的链式存储和运算—双向链表

以上讨论的单链表的结点中只有一个指向其后继结点的指针域next,因此若已知某结点的指针为p,其后继结点的指针则为p->next ,而找其前驱则只能从该链表的头指针开始,顺着各结点的next 域进行,也就是说找后继的时间性能…

Oracle常用字符串操作

参考: 一、oracle操作字符串:拼接、替换、截取、查找; 二、oracle中的trim函数使用介绍 --字符串去空格 --输出:a b c; SELECT TRIM( a b c ) || ; FROM dual; SELECT TRIM(BOTH FROM a b c ) || ; FROM dual; --输出: a …

linux下面安装maven

maven作为最近比较火的项目管理工具,对项目的jar包及其开元添加相应的插件的管理,很方便。 安装maven: 在官网上面去下载最新的maven的压缩包,apache-maven-3.3.1-bin.tar.gz. 将下载的压缩包保存/usr/local/maven下,进…

Hibernate懒加载问题

刚开始接触这种数据持久化框架时,使用的是Maybatis,相较于最原始的JDBCSQL模式,Maybatis简直就是神器,特别是在用过Maybatis动态SQL后,简直就开始对Maybatis爱不释手。后来工作要求,又接触到了Hibernate&am…

实现点击按钮后,倒计时60秒才能再次点击

转载于:https://www.cnblogs.com/liu201312/p/4447710.html

通过栈(Stack)实现对树的遍历

说到数的遍历树,长期以来的第一印象都是通过递归去实现。然而今天看了某位前辈的代码,才发现使用栈去实现遍历是那么简单。理论上通过数组也是可以实现同等功能的,毕竟Stack也是通过数据去实现的。 package com.sysway.ui.widget;import jav…

设计模式_01_单一原则

设计模式_01_单一原则 package designPatternOf_01; /*** 单一原则示例:动物呼吸* 引入的问题:鱼不吸空气,吸水*/ public class SinglePrinciple_01 {public static void main(String[] args) {Animal animalnew Animal();animal.breath(&quo…

StroyBoard中UICollectionView中添加Header和footer

到Storyboard中,选择collection view controller中的"Collection View"。在Attributes inspector中,选择"Section Header"和"Section Footer",一旦选中你就会在屏幕中看到下面的的显示: 最重要的是&#xff0c…

树形结构数据汇总查询解决方案+优化求助

最近遇到一个地区数据汇总的问题,地区下的地址呈树形结构,(简化结构)如A市下有B、C区,B区下有D、E街道。先要查询所有地区的人数(包括子区域),如A的人数直属A的人数B的人数C的人数D的…

find 是区分大小写的。对于不区分大小写的写法(转载)

转自:http://justwinit.cn/post/3633/ 默认情况下,find 是区分大小写的。对于不区分大小写的 find,将 -iname 测试替换为 -name 测试。find downloads -iname "*.gif"downloads/.xvpics/Calendar05_enlarged.gifdownloads/lcmgcfe…

ORACLE会话以及SQL执行信息查询

select t.BLOCKING_SESSION,t.SQL_ID,t.SID,t.SERIAL#,t.MACHINE,t.PROGRAM,t.ACTION,t.LOGON_TIME "登录时间",trunc((sysdate - t.LOGON_TIME) * 24 * 60 * 60) || s "登录时长",trunc(nvl(s.ELAPSED_TIME / decode(s.EXECUTIONS, 0, 1, s.EXECUTIONS) /…

Dom4j 学习笔记

dom4j 是一种解析 XML 文档的开放源代码 XML 框架。dom4j下载地址 本文主要记载了一些简单的使用方法。 一、xml文件的解析 dom4j既可以解析普通的xml文件&#xff0c;也可以解析一个InputStream&#xff0c;先看看xml文件长什么样子&#xff1a; <books><book>&l…

交叉连接(CROSS JOIN)的实际应用

一次偶然的机会&#xff0c;使用到了万年不用的交叉连接&#xff08;CROSS JOIN&#xff09; 业务场景如下&#xff1a; 1、存在多个运营商&#xff0c;每个运营商下面都有各种类型的设备&#xff0c;不同运营商的设备不完全相同&#xff1b; 2、任何设备有且仅有两种用途‘…

Atitit.操作注册表 树形数据库 注册表的历史 java版本类库总结

Atitit.操作注册表 树形数据库 注册表的历史 java版本类库总结 1. 注册表是树形数据库 1 2. 注册表的由来 1 3. Java 操作注册表 2 3.1. 使用Preferences API &#xff08;限定访问路径了&#xff09; 2 3.2. 使用JNI 3 3.3. Jregistrykey 推荐 4 3.4. Jregistry 4 4. org.ope…

C# xml文件读取与修改

c#读写xml文件已知有一个XML文件&#xff08;bookstore.xml&#xff09;如下&#xff1a; Code<?xml version"1.0" encoding"gb2312"?><bookstore> <book genre"fantasy" ISBN"2-3631-4"> <title>Obero…

外连接从表过滤

1、使用left join时从表的过滤 WITH a AS( SELECT A aid FROM dual UNION ALL SELECT B FROM dual UNION ALL SELECT C FROM dual UNION ALL SELECT D FROM dual UNION ALL SELECT E FROM dual ), b AS( SELECT A aid,10 num,1 type FROM dual UNION ALL SELECT B,20,2 FROM d…

php pcntl 多进程学习

1、捕获子进程退出&#xff08;监听SIGCHLD信号&#xff0c;然后调用 pcntl_wait 函数&#xff09; declare(ticks1);pcntl_signal(SIGCHLD, "sig_handler"); function sig_handler($signo) {switch ($signo) {case SIGCHLD:$status 0;$child_id pcntl_wait($statu…

Oracle取最大/最小值函数

SELECT greatest(DATE2020-01-01,DATE2020-01-03,DATE2020-01-05,DATE2020-01-07,DATE2020-01-09) 最大值, least(1,3,5,7,9) 最小值 FROM dual; SELECT 1 FROM dual WHERE greatest(1,3,5,7,9) > 8;