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
    BEGIN
    	declare 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 bigint
    
    LANGUAGE SQL
    
    BEGIN
    
      DECLARE loop_start bigint;
      DECLARE total_sum bigint;
    
      SET loop_start = start_num;
      SET total_sum = 0;
    
      WHILE loop_start <= end_num DO
        SET 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
    BEGIN
    	DECLARE 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;
        --如果本身就是公司,直接返回,如果是部门循环找上级直到找到公司ID
      	SET loop_dept_id = v_dept_id;
     
        WHILE dept_level >= 2 DO
          SELECT t1.PARENT_ID ,t2.DEPT_LEVEL into loop_dept_id,dept_level FROM sys_company_dept t1
    	  LEFT 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 表名')
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/177922.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

成为AI产品经理——AI产品经理工作全流程

一、业务背景 背景&#xff1a;日常排球训练&#xff0c;中考排球项目和排球体测项目耗费大量人力成本和时间成本。 目标&#xff1a;开发一套用于实时检测排球运动并进行排球垫球计数和姿势分析的软件。 二、产品工作流程 我们这里对于产品工作流程的关键部分进行讲解&…

SQL 中的 MIN 和 MAX 以及常见函数详解及示例演示

SQL MIN() 和 MAX() 函数 SQL中的MIN()函数和MAX()函数用于查找所选列的最小值和最大值&#xff0c;分别。以下是它们的用法和示例&#xff1a; MIN() 函数 MIN()函数返回所选列的最小值。 示例&#xff1a; 查找Products表中的最低价格&#xff1a; SELECT MIN(Price) F…

Vue 重写push和replace方法,解决:Avoided redundant navigation to current location

当我们使用编程式路由导航跳转路径时&#xff0c;如果我们两次携带同样的参数进行跳转&#xff0c;会进行页面报错&#xff1a; 那产生这个问题的原因是什么呢&#xff1f; 我们接收并输出调用push方法返回的结果&#xff1a; 会发现这是一个Promise对象 我们都知道&#xff…

2023年G2电站锅炉司炉证考试题库及G2电站锅炉司炉试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年G2电站锅炉司炉证考试题库及G2电站锅炉司炉试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大纲…

【Java 进阶篇】Redis 数据结构:轻松驾驭多样性

引言 Redis是一款强大的键值对存储系统&#xff0c;其数据结构的多样性是其引以为傲的特点之一。在这篇博客中&#xff0c;我们将深入探讨Redis的主要数据结构&#xff0c;包括字符串、哈希表、列表、集合和有序集合&#xff0c;并通过实例代码演示它们的用法。 1. 字符串&am…

小程序存在优惠卷遍历,但是歪了

进入小程序&#xff0c;因为是一个小商城&#xff0c;所以照例先查看收货地址是否存在越权&#xff0c;以及能否未授权访问&#xff0c;但是发现不存在这些问题&#xff0c;所以去查看优惠卷 进入领券中心&#xff0c;点击领取优惠券时抓包 发现数据包&#xff0c;存在敏感参数…

基于SpringBoot+Vue的体检预约管理系统

基于SpringBootVue的体检预约管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 管理员界面 用户界面 摘要 体检预约管理系统是一种基于Spring Boot…

Node.js入门指南(一)

目录 Node.js入门 什么是Node.js Node.js的作用 Node.js安装 Node.js编码注意事项 Buffer(缓冲器&#xff09; 定义 使用 fs模块 概念 文件写入 文件读取 文件移动与重命名 文件删除 文件夹操作 查看资源状态 路径问题 path模块 Node.js入门 什么是Node.js …

SSH连接远程服务器报错:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED 解决方法

一.错误描述 报错信息里提示了路径信息/root/.ssh/known_hosts:20 二.解决方案 方法一 输入以下指令&#xff1a; ssh-keygen -R XXX&#xff08;需要连接远程服务器的ip&#xff09; 按照我的例子ip:10.165.7.136&#xff0c;会返回以下信息: 重新尝试连接&#xff1a; 输…

数据结构学习笔记——多维数组、矩阵与广义表

目录 一、多维数组&#xff08;一&#xff09;数组的定义&#xff08;二&#xff09;二维数组&#xff08;三&#xff09;多维数组的存储&#xff08;四&#xff09;多维数组的下标的相关计算 二、矩阵&#xff08;一&#xff09;特殊矩阵和稀疏矩阵&#xff08;二&#xff09;…

7种SQL的进阶用法

1.自定义排序&#xff08;ORDER BY FIELD&#xff09; 在MySQL中ORDER BY排序除了可以用ASC和DESC之外&#xff0c;还可以使用自定义排序方式来实现。 CREATE TABLE movies ( id INT PRIMARY KEY AUTO_INCREMENT, movie_name VARCHAR(255), actors VARCHAR(255), price DEC…

MySQL面试,MySQL事务,MySQL锁,MySQL集群,主从,MySQL分区,分表,InnoDB

文章目录 数据库-MySQLMySQL主从、集群模式简单介绍1、主从模式 Replication2、集群模式3、主从模式部署注意事项 UNION 和 UNION ALL 区别分库分表1.垂直拆分2、水平拆分 MySQL有哪些数据类型1、整数类型**&#xff0c;2、实数类型**&#xff0c;3、字符串类型**&#xff0c;4…

MySQL 事务的底层原理和 MVCC(一)

在事务的实现机制上&#xff0c;MySQL 采用的是 WAL&#xff08;Write-ahead logging&#xff0c;预写式日志&#xff09;机制来实现的。 在使用 WAL 的系统中&#xff0c;所有的修改都先被写入到日志中&#xff0c;然后再被应用到系统中。通常包含 redo 和 undo 两部分信息。 …

初识Java 18-2 泛型

目录 构建复杂模型 类型擦除 C中的泛型 迁移的兼容性 类型擦除存在的问题 边界的行为 对类型擦除的补偿 创建类型实例 泛型数组 本笔记参考自&#xff1a; 《On Java 中文版》 构建复杂模型 泛型的一个优点就是&#xff0c;能够简单且安全地创建复杂模型。 【例子&am…

广告机/商业显示屏_基于MT878安卓主板方案

安卓主板在广告机领域扮演着重要的角色。无论是在商场、车站、酒店、电梯、机场还是高铁站&#xff0c;LED广告机广泛应用&#xff0c;并通过不同方式进行播放和管理。 广告机/商业显示屏_基于MT878安卓主板方案 基于MT8788安卓主板方案的广告机采用了联发科MT8788八核芯片方案…

力扣.面试题 04.06. 后继者(java 树的中序遍历)

Problem: 面试题 04.06. 后继者 文章目录 题目描述思路解题方法复杂度Code 题目描述 设计一个算法&#xff0c;找出二叉搜索树中指定节点的“下一个”节点&#xff08;也即中序后继&#xff09;。 如果指定节点没有对应的“下一个”节点&#xff0c;则返回null。 思路 由于题…

msvcp140.dll是什么?msvcp140.dll丢失的有哪些解决方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp140.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题&#xff0c;我们需要采取一些措施来修复丢失的msvcp140.dll文件。本文将详细介绍5个解决msvcp140.dl…

visual studio 如何建立 C 语言项目

安装这个 模块。 新建 空项目 创建完成 写demo 点击运行&#xff1a;

计算机毕业设计 基于微信小程序的“共享书角”图书借还管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

经典中的经典之字符串

前言&#xff1a;前段时间发烧了&#xff0c;所以耽误了很多事情&#xff0c;一直没有更新&#xff0c;多穿点衣服&#xff0c;感冒不好受。 接下来有时间就会陆续更新一些基础的算法题&#xff0c;题目都很经典&#xff0c;大家可以先尝试着做&#xff0c;再看 解析。 第一…