首页 > 其他分享 >lightdb empty_clob/empty_blob 函数兼容性升级

lightdb empty_clob/empty_blob 函数兼容性升级

时间:2023-12-25 17:45:46浏览次数:29  
标签:函数 clob -- empty null select blob

背景

在 Oracle 中,长度为 0 的字符串被视为 NULL. 下文中长度为 0 的字符串被称为 EMPTY_STRING. 而 PostgreSQL 能够区别对待 EMPTY_STRING 和 NULL. 为了兼容 Oracle 的行为,在 LightDB 23.4 版本前,已经基本将 EMPTY_STRING 当成了 NULL. 如, 以下 sql,

select ''::text is null;

在 Postgres 中,返回的是 false, 在 LightDB oralce 模式中返回的是 true. 但是 CLOB 数据类型有个特殊的函数 empty_clob(),该函数返回值的长度为 0,但不是 NULL. 在 LightDB 23.4 版本前,empty_clob() 函数就是使用 ''::text 实现的,因此导致了 empty_clob() 函数与 Oracle 不兼容。

在 LightDB 23.4 版本中,我们重新实现了 empty_clob() 函数,确保了该函数行为和 Oracle 一致。

使用案例

以下 sql 需要在 LightDB 的 oracle 模式数据库下运行,

  1. 基本行为测试
--= false
select empty_clob() is null;

--= 0
select length(empty_clob());

select dbms_lob.getlength(empty_clob());
  1. 作为列的默认值
create table t(a int, b clob default empty_clob());
insert into t(a) values (1);
insert into t values (2, 'hello');
--= 2
select count(*) from t where b is not null;
--= 1
select count(*) from t where length(b) > 0;
  1. 使用在其他字符串函数中
--= 1
select 1 from dual where trim(empty_clob() from empty_clob()) is not null;
--= 1
select 1 from dual where trim('x' from 'x') is null;
--= 1
select 1 from dual where trim('x' from to_clob('x')) is not null;
--= not null
select nvl2(empty_clob(), 'not null', 'null') from dual;

标签:函数,clob,--,empty,null,select,blob
From: https://www.cnblogs.com/lddcool/p/17926623.html

相关文章

  • MySql对表加字段( You have to change some columns to TEXT or BLOBs)
    对MySql中表增加字段,发现提示报错:1、首先了解下字符集不同字符集下,占用空间不一样gbk编码中,1个字符占用2个字节utf8编码(默认)中,1个字符占用3个字节utf8mb4编码中,1个字符占用4个字节varchar除了存储字符,还需要额外的空间来存储长度和是否为NULL,分别占用1-2字节和1字节2、行大小限制 ......
  • 谈谈JS二进制:File、Blob、FileReader、ArrayBuffer、Base64
    JavaScript提供了一些API来处理文件或原始文件数据,例如:File、Blob、FileReader、ArrayBuffer、base64等。下面就来看看它们都是如何使用的,它们之间又有何区别和联系!1.BlobBlob全称为binarylargeobject,即二进制大对象,它是JavaScript中的一个对象,表示原始的类似文件......
  • MapStruct+Maven+Lombok问题NoSuchBeanDefinitionException、does not have an access
    概述先直接说我遇到的问题吧,SpringBoot应用启动失败:ERROR|org.springframework.boot.web.embedded.tomcat.TomcatStarter|onStartup|61|-ErrorstartingTomcatcontext.Exception:org.springframework.beans.factory.UnsatisfiedDependencyException.Message:Error......
  • blob 下载文件type是否必须设置
    又遇到了一件鬼打墙的事,欲哭无泪。1几天前,有个bug:blob文件下载,如果下载非txt文件,比如图片、xlsx,下载后的文件无法正确显示。//下载文件asyncdownload(row,prop){constres=awaitresourceDownload(row[prop.field+"fileId"]);//res为blob......
  • Docker安装Zabbix-server出现[its "users" table is empty]问题的解决
    简述安装过程dockerrun--namezabbix-db--networkzabbixnet-eMYSQL_ROOT_PASSWORD="password"-eMYSQL_USER="zabbix"-eMYSQL_PASSWORD="zabbix"-eMYSQL_DATABASE="zabbix"-dmysqldockerrun--namezabbix-server--net......
  • mybatis-plus处理blob字段
    转载自:www.javaman.cn在SpringBoot项目中使用MyBatis-Plus处理longblob字段时,我们可以按照以下步骤进行操作。假设longblob存储的是字符串数据。以下是完整的示例代码:添加依赖:在你的项目的pom.xml文件中添加MyBatis-Plus的依赖:<dependency><groupId>com.......
  • C#更新Oracle Clob字段
    参考1:https://learn.microsoft.com/zh-cn/dotnet/framework/data/adonet/oracle-lobs参考2:https://www.feiniaomy.com/post/95482.html一、现象OralceBlobClob等类型无法直接使用updatesetXXX='xxx'的方式已进行更新。特别是加入字符超过4000就会报字符过长的错误根据参......
  • 最新Unity DOTS教程之BlobAsset核心机制分析
    最近DOTS发布了正式的版本,我们来分享一下DOTS里面BlobAsset机制,方便大家上手学习掌握UnityDOTS开发。BlobAsset 概叙DOTS提供了BlobAsset机制来把数据生成高效的二进制数据。BlobAsset的数据是不可变的。BlobAsset只支持非托管类型数据。支持Burst编译器编译出来的类型。同......
  • 【面试攻略】Oracle中blob和clob的区别及查询修改方法
    大家好,我是小米,欢迎来到小米的技术小屋!今天我们要一起来聊聊一个在面试中常常被问到的问题——“Oracle中Blob和Clob有啥区别,在代码中怎么查询和修改这两个类型的字段里的内容?”别急,跟着小米一步步揭开这个技术的神秘面纱!Blob和Clob是什么?首先,让我们来了解一下Blob和Clob是什么。......
  • ArrayBuffer和Blob解析
    API介绍1、ArrayBuffer:用来表示通用的、固定长度的原始二进制数据缓冲区。它不能直接读写,只能通过视图(TypedArray视图和DataView视图)来读写,视图的作用是以指定格式解读二进制数据。2、TypedArray:一个TypedArray对象描述了底层二进制数据缓冲区的类数组视图3、DataView:DataVi......