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 表名')
相关文章:
DB2—03(DB2中常见基础操作)
DB2—03(DB2中常见基础操作) 1. 前言1.1 oracle和mysql相关 2. db2中的"dual"2.1 SYSIBM.SYSDUMMY12.2 使用VALUES2.3 SYSIBM.SYSDUMMY1 "变" dual 3. db2中常用函数3.1 nvl()、value()、COALESCE()3.2 NULLIF() 函数3.3 LISTAGG() …...
华为云cce健康检查有什么用?配置需要注意什么?
华为云cce健康检查 如上图,华为云健康检查可用来探测cce的实例运行状态,必要时cce会自动重启实例,达到cce持续服务。 但是配置时需要注意一下几个方面,否则cce的状态总是有些不正常。 1、http探查比较友好。因为我们的在cce里面…...
微信小程序会议OA-登录获取手机号流程登录-小程序导入微信小程序SDK(从微信小程序和会议OA登录获取手机号到登录小程序导入微信小程序SDK)
目录 获取用户昵称头像和昵称 wx.getUserProfile bindgetuserinfo 登录过程 登录-小程序 wx.checkSession wx.login wx.request 后台 准备数据表 反向生成工具生成 准备封装前端传过来的数据 小程序服器配置 导入微信小程序SDK application.yml WxProperties …...
原来 TinyVue 组件库跨框架(Vue2、Vue3、React、Solid)是这样实现的?
本文由 TinyVue 组件库核心成员郑志超分享,首先分享了实现跨框架组件库的必要性,同时通过演示Demo和实际操作向我们介绍了如何实现一个跨框架的组件库。 前言 前端组件库跨框架是什么? 前端组件库跨框架是指在不同的前端框架(如…...
自定义label组件
自定义label组件 支持边框绘制 支持shape背景(按指定圆角裁剪,矩形,圆角矩,圆形),支持指定角圆角 支持自定义阴影(颜色,偏移,深度) 边框颜色支持状态选择器 预览 核心绘制辅助类 public class LabelHelper {private final Paint paint;private Paint shadowPaint;private fina…...
【Linux】使用Makefile自动化编译项目:简化开发流程、提高效率
文章目录 示例一:编译一个进度条程序示例二:编译一个简单的程序gcc的几个选项结论 当你开始一个新的软件项目时,编写一个好的Makefile是非常重要的。Makefile是一个文本文件,用于指定如何构建和编译项目。它定义了目标文件、依赖关…...
浅谈开源和闭源的认知
目录 在大型模型的发展中,开源和闭源两种截然不同的开发模式扮演着关键的角色。开源模式通过促进技术共享,吸引了大量优秀人才的加入,从而推动了大模型领域的不断创新。与此相反,闭源模式则着重于保护商业利益和技术优势ÿ…...
你了解Postman 变量吗?
变量是在Postman工具中使用的一种特殊功能,用于存储和管理动态数据。它们可以用于在请求的不同部分、环境或集合之间共享和重复使用值。 Postman变量有以下几种类型: 1、环境变量(Environment Variables): 环境变量是在Postman…...
ArmSoM-RK3588编解码之mpp编码demo解析:mpi_enc_test
一. 简介 [RK3588从入门到精通] 专栏总目录mpi_enc_test 是rockchip官方编码 demo本篇文章进行mpi_enc_test 的代码解析,编码流程解析 二. 环境介绍 硬件环境: ArmSoM-W3 RK3588开发板 软件版本: OS:ArmSoM-W3 Debian11 三. …...
【ES6.0】-详细模块化、export与Import详解
【ES6.0】-详细模块化、export与Import详解 文章目录 【ES6.0】-详细模块化、export与Import详解一、模块化概述二、ES6模块化的语法规范三、export导出模块3.1 单变量导出3.2 导出多个变量3.3 导出函数3.4 导出对象第一种第二种: 3.5 类的导出第一种第二种 四、imp…...
网工内推 | Base北京,国企网工运维,最高30k*14薪,IE认证优先
01 万方数据股份有限公司 招聘岗位:网络工程师 职责描述: 1.负责完成基础网络组网工作; 2.负责网络对象的访问控制及安全策略,配置VLan,黑白名单、地址转换、故障排查及网络安全监控工作; 3.负责对操作系…...
SQL LIKE 运算符:用法、示例和通配符解释
SQL中的LIKE运算符用于在WHERE子句中搜索列中的指定模式。通常与LIKE运算符一起使用的有两个通配符: 百分号 % 代表零个、一个或多个字符。下划线 _ 代表一个单个字符。 以下是LIKE运算符的用法和示例: 示例 选择所有以字母 “a” 开头的客户&#x…...
编译原理Lab1-用FLEX构造C-Minus-f词法分析器
HNU编译原理lab1实验–根据cminux-f的词法补全lexical_analyer.l文件,完成词法分析器。 本文没有添加任何图片,但是以复制输出的形式展现出来了实验结果。 实验要求: 根据cminux-f的此法补全lexical_analyer.l文件,完成词法分析…...
网络安全之渗透测试入门准备
渗透测试入门所需知识 操作系统基础:Windows,Linux 网络基础:基础协议与简单原理 编程语言:PHP,python web安全基础 渗透测试入门 渗透测试学习: 1.工具环境准备:①VMware安装及使用;…...
【MySQL】宝塔面板结合内网穿透实现公网远程访问
文章目录 前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了Linux命令行进行繁琐的配置,下面简单几步,通过宝塔面板cpo…...
通过AX6000路由器,实现外部访问内网的任意主机
概述 这里遇到一个场景,就是需要外部的人员,访问我内网的一台设备,进行内外部的设备联调。 这也是实际环境中,很常见的一种场景。 之前的做法是子设备上运行edge节点,可以直接访问。 但有的设备无法运行edge节点,那么可以参考一下这个方案来实现。 此方案可以摒弃了…...
如何应用ChatGPT撰写、修改论文及工作报告,提供写作能力及优化工作??
如果我想让gpt从pdf文档中提取相关关键词的内容,可以怎么做呢??我们评论区讨论 ChatGPT 在论文写作与编程方面也具备强大的能力。无论是进行代码生成、错误调试还是解决编程难题,ChatGPT都能为您提供实用且高质量的建议和指导&am…...
camera-caps:Jetson设备上的一种实用的V4L2可视化界面
camera-caps:Jetson设备上的一种实用的V4L2可视化界面 github地址是: https://github.com/jetsonhacks/camera-caps 注意:Jetpack5.x需要选择tag 5.x版本...
CAN基础知识
CAN 简介 CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO 国际标准化的串行通信 协议。在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种 各样的电子控制系统被开发了出来…...
vue3跨域怎么解决?
其实很简单 假设一个接口; http://101.42.170.68:10000/open/mockData/test1 首先,看自己项目中有没有vue.config.js文件,如果没有自己创建一个,如果有那吗在其中写。 vue.config.js: //固定格式,修改一部分就行了 const { def…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
