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.pswp.cn/news/273305.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273305.shtml
英文地址,請注明出處:http://en.pswp.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;