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…...
STM32串口高效通信实战:用HAL_UART_Transmit_IT+DMA打造不卡顿的日志输出系统
STM32串口高效通信实战:用HAL_UART_Transmit_ITDMA打造不卡顿的日志输出系统 在实时控制系统开发中,日志输出是调试和状态监控的重要手段。但当系统需要处理电机控制、传感器数据采集等高实时性任务时,传统的阻塞式串口打印往往会成为性能瓶颈…...
警惕钓鱼压缩包!WinRAR CVE-2023-38831漏洞的社工利用场景分析与防御建议
警惕钓鱼压缩包:WinRAR漏洞的社会工程学攻击与防御实战指南 当你收到一封标注"2023年第四季度财务报表.zip"的邮件,或是同事通过即时通讯工具发来的"会议纪要.rar"时,是否会毫不犹豫地双击打开?这种看似平常的…...
如何解锁联想拯救者笔记本的隐藏BIOS选项:一位技术爱好者的探索之旅
如何解锁联想拯救者笔记本的隐藏BIOS选项:一位技术爱好者的探索之旅 【免费下载链接】LEGION_Y7000Series_Insyde_Advanced_Settings_Tools 支持一键修改 Insyde BIOS 隐藏选项的小工具,例如关闭CFG LOCK、修改DVMT等等 项目地址: https://gitcode.com…...
Book118文档下载器:快速获取在线文档的完整解决方案
Book118文档下载器:快速获取在线文档的完整解决方案 【免费下载链接】book118-downloader 基于java的book118文档下载器 项目地址: https://gitcode.com/gh_mirrors/bo/book118-downloader 你是否经常需要查阅学术文献或技术文档,却因为付费墙或下…...
一个Bug引发血案:AI服务恢复后为何还在报错?——双重缓存污染的排查与治理
写在前面某个周四下午,运维同学告诉我Python AI服务因为网络波动短暂不可用,几分钟后恢复了。但诡异的事情发生了——用户继续提问,系统却依然返回“AI服务暂时不可用”,而且是毫秒级返回。我第一反应是服务没恢复,检查…...
超自动化:RPA+AI Agent 深度融合
超自动化:RPAAI Agent 深度融合 📝 本章学习目标:本章展望未来趋势,帮助读者把握AI Agent发展方向。通过本章学习,你将全面掌握"超自动化:RPAAI Agent 深度融合"这一核心主题。 一、引言…...
Flask会话管理:SessionFactory 与 Flask-SQLAlchemy 的生命周期管理
更多内容请见: 《Python Web项目集锦》 - 专栏介绍和目录 文章目录 第一章:解剖底层——原生 SQLAlchemy 的三驾马车 1.1 Engine(引擎):物理连接的工厂 1.2 SessionFactory(会话工厂):会话的流水线 1.3 Session(会话):对象的生命周期容器 第二章:化繁为简——Flask…...
终极指南:深入解析JetBrains IDE评估重置器的架构设计与实现原理
终极指南:深入解析JetBrains IDE评估重置器的架构设计与实现原理 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter JetBrains IDE评估重置器(ide-eval-resetter)是一款用于重置Je…...
Locale-Emulator终极指南:三步解决Windows程序语言乱码问题
Locale-Emulator终极指南:三步解决Windows程序语言乱码问题 【免费下载链接】Locale-Emulator Yet Another System Region and Language Simulator 项目地址: https://gitcode.com/gh_mirrors/lo/Locale-Emulator 你是否遇到过这样的情况:下载了一…...
OpenWrt 23.05版本解析:路由器与嵌入式系统升级
1. OpenWrt 23.05版本深度解析:从路由器到嵌入式系统的全面升级作为一名长期使用OpenWrt的网络工程师,每次新版本发布都像拆盲盒一样充满期待。这次23.05版本的更新幅度之大,让我不得不连夜刷机测试。这个专为路由器和资源受限设备打造的Linu…...
