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.mzph.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; …