DB2—03(DB2中常見基礎操作)

DB2—03(DB2中常見基礎操作)

  • 1. 前言
    • 1.1 oracle和mysql相關
  • 2. db2中的"dual"
    • 2.1 SYSIBM.SYSDUMMY1
    • 2.2 使用VALUES
    • 2.3 SYSIBM.SYSDUMMY1 "變" dual
  • 3. db2中常用函數
    • 3.1 nvl()、value()、COALESCE()
    • 3.2 NULLIF() 函數
    • 3.3 LISTAGG() 與 xml2clob()、xmlagg()
  • 4. DB2中自定義函數
    • 4.1 簡單入門函數
      • 4.1.1 語法結構
      • 4.1.2 例子
        • 4.1.2.1 例子1——求兩數和
        • 4.1.2.2 例子2——自定義等差數列的n項和
    • 4.2 返回table的自定義函數
    • 4.3 自定義遞歸查詢函數
  • 5. 解決 db2-表 處于暫掛狀態

1. 前言

1.1 oracle和mysql相關

  • 部分語法和oracle、mysql都大同小異、關于oracle和mysql的可以看下面的文章:
    • Oracle 常用簡單sql操作(insert into、merge into、start with connect by prior以及 regexp_substr等各種函數用法詳解).
    • Oracle自定義函數、Oracle存儲過程多種用法講解以及動態創建表的存儲過程.
    • Oracle中分割字符串的方法.
    • oracle遞歸查詢(start with connect by prior)以及 樹形統計connect_by_root(子節點匯總到父節點).
    • Oracle自定義函數實現遞歸查詢(用自定義函數替換connect_by_root).
    • Mysql 創建存儲過程和函數及各種例子

2. db2中的"dual"

2.1 SYSIBM.SYSDUMMY1

  • db2中沒有這個表,在db2中類似dual表的是 SYSIBM.SYSDUMMY1,效果如下:
    SELECT 1+1 FROM SYSIBM.SYSDUMMY1;SELECT CURRENT DATE FROM SYSIBM.SYSDUMMY1;--查詢當前日期
    
    在這里插入圖片描述

2.2 使用VALUES

  • 如果嫌 SYSIBM.SYSDUMMY1 麻煩,可以使用 VALUES 命令獲取結果,如下:
    VALUES (3+2);values length('abc');values CURRENT DATE;
    
    在這里插入圖片描述
    在這里插入圖片描述

2.3 SYSIBM.SYSDUMMY1 “變” dual

  • 如果你習慣了dual,那就為 SYSIBM.SYSDUMMY1 創建別名dual,如下:
    CREATE ALIAS dual FOR SYSIBM.SYSDUMMY1; --創建別名SELECT 5+7 FROM dual;
    
    在這里插入圖片描述

3. db2中常用函數

3.1 nvl()、value()、COALESCE()

  • 先說一下nvl()
    • nvl(),語法如下:
      nvl(val1,val2)
      
    • 功能:
      如果val1為空(注意:這里的空是null,不算空字符串),則返回val2,否則返回val1本身,例子如下:
      SELECT nvl(null,0),nvl(234,0),nvl('','aa') FROM SYSIBM.SYSDUMMY1; 
      
      在這里插入圖片描述
    • 注意:
      其表達式的值可以是數字型、字符型和日期型。但是表達式1和表達式2的數據類型必須為同一個類型
    • value()COALESCE() 用法同nvl()
  • 再說一下nvl2()
    SELECT nvl2(null,0,1),nvl2(234,0,1),nvl2('','不空','空') FROM SYSIBM.SYSDUMMY1; 
    
    在這里插入圖片描述
  • 接著說一下 value()COALESCE()
    value()COALESCE() 就簡單,因為用法同nvl(),給兩個語句,自己下去測測看:
    SELECT value(null,0),value(56,0),value('','bb') FROM SYSIBM.SYSDUMMY1; SELECT COALESCE(null,0),COALESCE(56,0),COALESCE('','bb') FROM SYSIBM.SYSDUMMY1; 
    
    在這里插入圖片描述
  • 最后選哪個,個人覺得還是用nvl()nvl2() 吧,除了熟悉之外還有就是以后換數據庫的話也好移植。

3.2 NULLIF() 函數

  • 如果相同返回NULL,否則返回第一個參數,如下:
    在這里插入圖片描述

3.3 LISTAGG() 與 xml2clob()、xmlagg()

  • 關于這三個函數的使用,如下:
    DB2中實現數據字段的拼接(LISTAGG() 與 xml2clob、xmlagg).

4. DB2中自定義函數

4.1 簡單入門函數

4.1.1 語法結構

4.1.2 例子

4.1.2.1 例子1——求兩數和
  • 代碼如下(end后面不用結束符合):
    create or replace function fun_sum_number(num1 bigint,num2 bigint)
    returns bigint
    BEGINdeclare v_result bigint;SET v_result = num1 + num2;return v_result;
    END
    
  • 測試如下:
    values(fun_sum_number(1,5));
    
    在這里插入圖片描述
4.1.2.2 例子2——自定義等差數列的n項和
  • 最小數、最大數以及步長確定的等差數列的n項和,實現代碼如下:
    CREATE OR REPLACE FUNCTION fun_all_num_sum(start_num bigint, end_num bigint, step_num bigint)RETURNS bigintLANGUAGE SQLBEGINDECLARE loop_start bigint;DECLARE total_sum bigint;SET loop_start = start_num;SET total_sum = 0;WHILE loop_start <= end_num DOSET total_sum = total_sum + loop_start;--step_num 步長SET loop_start = loop_start + step_num;END WHILE;RETURN total_sum;END
    
  • 效果如下:
    SELECT fun_all_num_sum(1,3,1),fun_all_num_sum(1,4,1),fun_all_num_sum(2,8,2) FROM SYSIBM.SYSDUMMY1 ;
    
    在這里插入圖片描述

4.2 返回table的自定義函數

  • 代碼如下:
    CREATE OR REPLACE FUNCTION fun_query_dog_by_id(dogId varchar(10)) 
    RETURNS TABLE(DOG_ID varchar(10), dog_name varchar(10), dog_kind varchar(10)
    )
    RETURN
    SELECT DOG_ID, dog_name, dog_kind
    FROM dog
    WHERE dog.DOG_ID  = fun_query_dog_by_id.dogId;
    --或者直接 WHERE dog.DOG_ID  = dogId;
    --WHERE dog.DOG_ID  = dogId;
    
  • 測試如下:
    • 原表數據
      在這里插入圖片描述
    • 使用函數查詢
      SELECT * FROM table(fun_query_dog_by_id('A10001'));
      
    在這里插入圖片描述

4.3 自定義遞歸查詢函數

  • 先看原始數據結構
    在這里插入圖片描述
  • 根據部門ID找公司ID,函數實現如下:
    CREATE OR REPLACE FUNCTION fun_get_company_id_by_dept_id(v_dept_id varchar(10))
    RETURNS varchar(10)
    LANGUAGE SQL
    BEGINDECLARE dept_level bigint;DECLARE loop_dept_id varchar(10);DECLARE result_company_id varchar(10);select t.DEPT_LEVEL into dept_level from sys_company_dept t where t.dept_id = v_dept_id;--如果本身就是公司,直接返回,如果是部門循環找上級直到找到公司IDSET loop_dept_id = v_dept_id;WHILE dept_level >= 2 DOSELECT t1.PARENT_ID ,t2.DEPT_LEVEL into loop_dept_id,dept_level FROM sys_company_dept t1LEFT JOIN sys_company_dept t2 ON t1.PARENT_ID  = t2.DEPT_ID where t1.dept_id = loop_dept_id;END WHILE;SET result_company_id = loop_dept_id;RETURN result_company_id;
    END
    
  • 效果如下:
    在這里插入圖片描述
  • 遞歸查詢部門及對應的公司列表,如下:
    SELECT temp.*,t2.DEPT_NAME AS company_name FROM (
    SELECT t1.*,fun_get_company_id_by_dept_id(t1.DEPT_ID) AS company_id FROM sys_company_dept t1
    )temp LEFT JOIN sys_company_dept t2 ON temp.company_id = t2.DEPT_ID 
    
    在這里插入圖片描述

5. 解決 db2-表 處于暫掛狀態

  • 有時當對表數據進行操作時,表鎖了,處于暫掛狀態,如果其他解決方法不能解決的話可以嘗試用以下語句進行解鎖,命令語句如下:
    call sysproc.admin_cmd('reorg table 表名')
    

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/161995.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161995.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161995.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

論文《Unsupervised Dialog Structure Learning》筆記:詳解DD-VRNN

D-VRNN模型和DD-VRNN模型 總體架構 離散-可變循環變分自編碼器&#xff08;D-VRNN&#xff09;和直接-離散-可變循環變分自編碼器&#xff08;DD-VRNN&#xff09;概述。D-VRNN和DD-VRNN使用不同的先驗分布來建模 z t z_t zt?之間的轉換&#xff0c;如紅色實線所示。 x t x_t…

Rust錯誤處理:Result

文章目錄 簡介錯誤匹配 Rust基礎教程&#xff1a; 初步? 所有權? 結構體和枚舉類? 函數進階? 泛型和特征? 并發和線程通信? cargo包管理? 可空類型Option Rust進階教程&#xff1a; 用宏實現參數可變的函數? 類函數宏 簡介 Rust中沒有提供類似try…catch之類…

qt雙擊treeview節點之后,完成編輯,獲取完成編輯得信號

Qt 中&#xff0c;要獲取 QTreeView 節點完成編輯的信號&#xff0c;您可以使用 QTreeView 的 doubleClicked 信號以及重寫相應的編輯觸發函數。通常情況下&#xff0c;完成編輯后會觸發 closeEditor 信號。 以下是一個示例代碼&#xff0c;演示了如何實現這個功能&#xff1a…

【亞太杯思路助攻】2023年第十三屆APMCM亞太地區大學生數學建模競賽——(文末領取方式)

2023年第十三屆APMCM亞太地區大學生數學建模競賽——正式開賽&#xff01;&#xff01;&#xff01; 賽題已由高分雅思學姐翻譯完成&#xff0c;我們的O獎學長也在第一時間分析了賽題&#xff0c;幫助大家最快時間&#xff0c;選擇最適合是自己的賽題。 B題 C題 祝各位小伙伴都…

[Android]使用Retrofit進行網絡請求

以下是使用 Retrofit 發送 POST 請求獲取分頁城市列表的 Kotlin 代碼示例 1.在你的 build.gradle 文件中添加 Retrofit 和 Gson 的依賴 dependencies {......implementation("com.squareup.retrofit2:retrofit:2.9.0")implementation("com.squareup.retrofit2…

排序算法--歸并排序

實現邏輯 ① 將序列每相鄰兩個數字進行歸并操作&#xff0c;形成floor(n/2)個序列&#xff0c;排序后每個序列包含兩個元素 ② 將上述序列再次歸并&#xff0c;形成floor(n/4)個序列&#xff0c;每個序列包含四個元素 ③ 重復步驟②&#xff0c;直到所有元素排序完畢 void pri…

C#結合JavaScript實現上傳視頻到騰訊云點播平臺

目錄 需求 關鍵代碼 界面元素布局 C# 實現服務端的簽名類 上傳視頻的JS實現 視頻演示 小結 需求 在云培訓系統里&#xff0c;制作視頻課件是我們的主要工作之一&#xff0c;制作完成后如果將這些素材存儲到服務器并進行分發播放&#xff0c;是擺在我們面前的一個問題。…

JVM垃圾回收相關算法

目錄 一、前言 二、標記階段&#xff1a;引用計數算法 三、標記階段&#xff1a;可達性分析算法 &#xff08;一&#xff09;基本思路 &#xff08;二&#xff09;GC Roots對象 四、對象的finalization機制 五、MAT與JProfiler的GC Roots溯源 六、清除階段&#xff1a;…

基于PCA算法的點云平面擬合

平面擬合 1、平面擬合2、參考文獻3、相關代碼 1、平面擬合 PCA 是一種數學變換的方法&#xff0c;利用降維的思想在變換中保持變量的總方差不變&#xff0c;將給定的一組變量線性變換為另一組不相關的變量&#xff0c;并且使變換后的第一變量的方差最大&#xff0c;即第一主成分…

OpenCV將兩張圖片拼接成一張圖片

OpenCV將兩張圖片拼接成一張圖片 示例代碼1示例代碼2 可以用opencv或者numpy的拼接函數&#xff0c;直接將兩張圖拼接到一起&#xff0c;很簡單方便&#xff0c;參考代碼2&#xff0c;推薦此方式。新建圖片&#xff0c;將兩張圖片的像素值填充到新圖片對應位置上即可&#xff0…

leetcode 32最長有效括號 34在排序數組中查找元素的第一個和最后一個位置

32. 最長有效括號 給你一個只包含 ( 和 ) 的字符串&#xff0c;找出最長有效&#xff08;格式正確且連續&#xff09;括號子串的長度。 示例 1&#xff1a; 輸入&#xff1a;s "(()" 輸出&#xff1a;2 解釋&#xff1a;最長有效括號子串是 "()" 示例 2&a…

python 二分查找函數應用——bisect_left(nums,target),bisect_right(nums,target)

bisect_left(nums,target),bisect_right(nums,target)是python內置的函數&#xff0c;可以便捷的幫我們完成一些有序序列的查找工作&#xff0c;現在將用三個樣例進行講解演示 前提注意事項&#xff1a; 導入函數模塊 待處理序列必須有序&#xff01;&#xff01;&#xff0…

淺談WPF之各種Template

前幾天寫了一篇文章【淺談WPF之控件模板和數據模板】&#xff0c;有粉絲反饋說這兩種模板容易弄混&#xff0c;不知道什么時候該用控件模塊&#xff0c;什么時候該用數據模板&#xff0c;以及template和itemtemplate之間的關系等&#xff0c;今天專門寫一篇文章&#xff0c;簡述…

26 - 原型模式與享元模式:提升系統性能的利器

原型模式和享元模式&#xff0c;前者是在創建多個實例時&#xff0c;對創建過程的性能進行調優&#xff1b;后者是用減少創建實例的方式&#xff0c;來調優系統性能。這么看&#xff0c;你會不會覺得兩個模式有點相互矛盾呢&#xff1f; 其實不然&#xff0c;它們的使用是分場…

TC397 EB MCAL開發從0開始系列 之 [15.1] Fee配置 - 雙扇區demo

一、Fee配置1、配置目標2、目標依賴2.1 硬件使用2.2 軟件使用2.3 新增模塊3、EB配置3.1 配置講解3.2 模塊配置3.2.1 MCU配置3.2.2 PORT配置3.2.3 Fls_17_Dmu配置3.2.4 Fee配置3.2.5 Irq配置3.2.6 ResourceM配置4、ADS代碼編寫及調試4.1 工程編譯4.2 測試結果4.3 測例源碼->

2023年學習Go語言是否值得?探索Go語言的魅力

關注公眾號【愛發白日夢的后端】分享技術干貨、讀書筆記、開源項目、實戰經驗、高效開發工具等&#xff0c;您的關注將是我的更新動力&#xff01; 作為一門流行且不斷增長的編程語言&#xff0c;Go語言在2023年是否值得學習呢&#xff1f;讓我們來看看學習Go語言的好處以及為何…

Java使用Maven打包jar包的全部方式

1. spring-boot-maven-plugin插件&#xff08;在springboot項目中使用&#xff09; <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals>…

1410.HTML 實體解析器

??題目來源&#xff1a; leetcode題目&#xff0c;網址&#xff1a;1410. HTML 實體解析器 - 力扣&#xff08;LeetCode&#xff09; 解題思路&#xff1a; 使用map存放特殊字符串及其應被替換為的字符串。然后遍歷字符串替換 map 中的字符串即可。 解題代碼&#xff1a; …