Oracle中的empty_clob()与empty_blob()在瀚高库中的兼容处理

(1)Oracle中的函数empty_clob()与empty_blob()

在Oracle中的函数EMPTY_BLOB()和EMPTY_CLOB()返回一个空LOB定位器,该定位器可用于初始化LOB变量,或者在INSERT或UPDATE语句中用于将LOB列或属性初始化为EMPTY。EMPTY表示初始化LOB,但不填充数据。

这两个函数分别对应Oracle中的数据类型CLOB和BLOB。

  • CLOB(Character Large Object):

        字符大对象Clob 用来存储单字节的字符数据。当oracle数据库当需要存入大数据量(大于4000)时,varchar2不够用,可以使用clob。CLOB使用CHAR来保存数据。 如:保存XML文档。
在PostgreSQL或SQLServer等数据使用text类型;

  • BLOB(Binary Large Object):

        二进制大对象,是一个可以存储二进制文件的容器。典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)
BLOB就是使用二进制保存数据。 如:保存位图。

这里要明确是用null能够用来初始化lob字段否。

我们在Oracle中有如下表test:
SQL> desc test.test;
 Name                       Null?    Type
 ----------------------------------------- -------- ----------------------------
 C1                            CLOB
 C2                            BLOB
 C3                            VARCHAR2(100)

INSERT INTO test values('','','');
INSERT INTO test values(null,null,null);
INSERT INTO test values(empty_clob(),empty_blob(),'');
其余两行数据需要使用管理工具进行填入,因为sql不能自动转换。我们可以得到如下四条数据:

执行以下SQL来查看长度:
SELECT dbms_lob.getlength(c1) c1_len,dbms_lob.getlength(c2) c2_len,dbms_lob.getlength(c3) ce_len FROM test;

可以看出来,null列的长度是null,不是0。要初始化一个lob字段的值,不能使用null,要使用empty_clob和empty_blob函数。


(2)瀚高数据库中的兼容处理:

那么在postgresql中该如何处理呢?
我们可以分别使用cast('' as text)和cast('' as blob)来处理。如果不想改动代码中的Oracle的函数,则可以创建这两个同名函数:

create or replace function empty_clob( ) 
returns text
as $$
begin
    return cast('' as text);
end;
$$ language plpgsql;

create or replace function empty_blob( ) 
returns bytea
as $$
begin
    return cast('' as blob);
end;
$$ language plpgsql;

我们创建一个表,并插入相关数据:

CREATE TABLE test (
    c1 text NULL,
    c2 bytea NULL,
    c3 varchar NULL
);

INSERT INTO test values('test'::text,'test'::bytea,'test'::varchar);
INSERT INTO test values(null,null,null);
INSERT INTO test values(''::text,''::bytea,''::varchar);
INSERT INTO test values('我们一起爬泰山'::text,'我们一起爬泰山'::bytea,'我们一起爬泰山'::varchar);

数据结果如下:

我们执行以下SQL来查看长度:
select length(c1) c1_len,length(c2) c2_len,length(c3) c3_len from test;

可以看出在瀚高数据库中使用null作为text或blob的初始值也是行不通的。为了值的有效性,也需要使用对应的初始值cast('' as text)和cast('' as blob)或初始函数empty_clob和empty_blob。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值