Oracle LOB数据类型

69、Oracle数据库中LOB数据类型的深入解析 本文深入解析了Oracle数据库中的LOB(Large Objects)数据类型,包括其分类(CLOB、BLOB、NCLOB和BFILE)、存储结构以及相关可选设置。详细探讨了LOB的多段对象特性、存储机制以及性能优化策略,例如表空间选择、行内存储、块大小设置和读一致性控制。通过示例代码和性能测试,文章展示了不同配置对数据库性能的影响,并提供了最佳实践建议。 阅读详情
一、概述
LOB数据类型专门用于存储大对象的数据,不超过4G字节,包括大文本、图像图像、视频剪切等。
Oracle8之前使用LONG、LOBG RAW来实现,现慢慢淘汰,8开始使用LOB实现。




二、LOB的分类
分为内部LOB和外部LOB。内部LOB包括CLOB、BLOB、NCOLB;外部LOB包括BFILE
内部LOB的数据存储在数据库中,并且支持事务操作(提交、回退、保持点);外部LOB的数据存储在OS文件中,并且不支持事务操作


CLOB(存放大字符数据)用于存储大批量字符数据,
BLOB(存放大二进制数据)用于存放音频、图像、图像,
NCLOB(存放大字符数据)用于存储大批量字符数据,

BFILE(存储指向OS文件的指针)用于存储电影文件。

三、LOB和LONG的比较
两者都可以存储大批量字符数据和二进制数据。


1、LONG\LONG ROW
1)、一个表只能有一个LONG或LONG RAW列
2)、数据最大长度2G字节
3)、select返回数据
4)、数据存储在行内
5)、不支持对象类型
6)、数据顺序访问

2、LOB
1)、一个表可以有多个LOB列
2)、数据最大长度4G字节
3)、select返回LOB定位符
4)、数据存储在行内或行外
5)、支持对象类型

6)、数据随机访问


4、临时LOB
说明:临时LOB相当于局部变量,与数据库表无关,并且只能由当前应用程序建立和使用。
当SQL语句中使用临时LOB时,它们只能作为输入宿主变量使用,可在where子句,values子句和set子句中使用临时LOB,而不能在into子句中使用。




四、DBMS_LOB包

DBMS_LOB是Oracle提供的、专门用于处理LOB类型数据的PL/SQL包,该包定义了一些变量、过程、函数,下面逐一讲述


2、过程APPEND
说明:用于将源LOB变量的内容添加到目标LOB变量的尾部。只适用于内部LOB类型的blob和clob。
语法:
DBMS_LOB.APPEND(dest_lob in out nocopy blob,src_lob in blob);
DBMS_LOB.APPEND(dest_lob in out nocopy blob character set any_cs,src_lob in clob character set dest_lob%charset);
其中,dest_lob指定目标LOB变量,src_lob指定源LOB变量。
例子:
declare
dest_lob clob;
sec_lob clob;
begin
src_lob:='中国';
desc_lob:='你好';
dbms_lob.append(dest_lob,src_lob);
dbms_output.put_line(dest_lob);
end;


3、过程close
说明:用于关闭已经打开的LOB,全适用。
语法:DBMS_LOB.CLOSE(lob_loc in out nocopy blob/clob/bfile);


4、函数compare
说明:用于比较2个LOB的全部内容或者部分内容,但只能用于比较同类型的LOB变量。全适用。
语法:
DBMS_LOB.COMPARE(
lob_1 in blob/clob/bfile,
lob_2 in blob/clob/bfile,
amount in integer:=4294967295,
offset_1 in integer:=1,
offset_1 in integer:=1);
其中,lob_1指定第一个lob变量;lob_2指定第二个lob变量;amount指定字符个数(clob)或字节数(blob);
offser_1指定第一个lob的初始位置;offser_2指定第二个lob的初始位置;比较结果返回0则结果相同;反之则不相同。
例子:
declare
  dest_lob clob;
  src_lob clob;
begin
sec_lob:='中国';
dest_lob:='中国';
if dbms_lob.compare(sec_lob,dest_lob)=0 then
 dbms_output.put_line('内容相同');
else
 dbms_output.put_line('内容不同');
end if;
end;
  
5、过程copy
说明:将源lob变量的部分或者全部内容复制到目标lob变量中,只使用内部LOB类型。
语法:
DBMS_LOB.copy(dest_lob in out bocopy blob/clob/nclob,src_lob in blob/clob/nclob,
amount in integer,dest_offset in integer:=1,src_offset in integer:=1);
其中,将src_lob复制到dest_lob,dest_offset用于指定要复制到目标lob变量的起始位置,src_offset用于指定源lob变量中开始复制的起始位置。
例子:
declare
  dest_lob clob;
  src_lob clob;
  amount int;
begin
sec_lob:='中国';
dest_lob:='你好,';
amount:=dbms_lob.getlength(sec_lob);
dbms_lob.copy(dest_lob,src_lob,amount,3);
dbms_output.put_line(dest_lob);
end;


6、过程createtemporary
说明:用于建立临时lob,Oracle会将临时lob建立在用户的临时表空间,只使用与内部LOB类型
语法:
DBMS_LOB.createtemporary(
lob_loc in out nocopy blob/clob/nclob,
cache in boolean,
dur in pls_integer:=10
);
其中,lob_loc指向lob定位符;cache指向是否要将lob读取到缓冲区;dur指向何时清除临时lob(10:会话结束时清除;12:调用结束时清除)
例如:
declare
  src_loh clob;
begin
DBMS_LOB.createtemporary(src_lob,true);
end;


7、过程erase
说明:用于删除lob变量的全部或部分内容,只适用内部lob。
语法:
dbms_lob.erase(lob_Loc in out nocopy blob/clob/nclob,amount in out nocopy integer,offset in integer:=1);
其中,offset指定开始删除内容的起始位置,length指定个数。
例子:
declare
  src_Lob clob;
  offset int;
  amount int;
begin
src_lob:='欢迎使用Oracle';
amount:=10;
offset:=5;
dbms_lob.erase(src_lob,amount,offset);
dbms_output.put_line(src_lob);
end;


8、过程fileclose
说明:用于关闭已经打开的bfile定位符所指向的os文件。
语法:
dbms_lob.fileclose(file_Loc in out ncopy bfile);
其中,file_loc指定bfile定位符。


9、过程filecloseall
说明:用于关闭当前会话已经打开的所有bfile文件。
语法:dbms_lob.filecloseall


10.函数fileexists
说明:用于确定bfile定位符所指向的os文件是否存在。
语法:dbms_lob.fileexists(file_Loc in bfile) return integer;
其中,存在则返回1,不存在返回0。
例子:
declare
  file1 bfile;
begin
file1:=bfilename('G','readme.doc');
if dbms_lob.fileexists(file1)=0 then
 dbms_output.put_line('文件不存在');
else
 dbms_output.put_line('文件存在');
end if;
end;


11、过程filegetname
说明:用于取得bfile定位符所对应的目录别名和文件名。
语法:
dbms_Lob.filegetname(file_loc in bfile,dir_alias out varchar2,filename out varchar2);
其中,dir_alias用于取得bfile定位符所对应的目录别名;filename用于取得bfile定位符所对应的文件名。
例子:
declare
  dir_alias varchar2(20);
  filename varchar2(50);
  file_Loc bfile;
begin
select filename into file_loc from bfile_table where fno=1;
dbms_lob.filegetname(file_Loc,fir_alias,filename);
dbms_output.put_line('目录'||dir_alias||'文件名'||filename);
end;


12、函数fileisopen
说明:用于确定bfile所对应的os文件是否已经打开。
语法:dbms_lob.fileisopen(file_loc in bfile) return integer;
其中文件被打开了返回1,否则返回0.
例子:
declare
  file1 bfile;
begin
file1:=bfilename('G','readme.doc');
if dbms_lob.fileisopen(file1)=0 then
 dbms_output.put_line('文件未打开');
else
 dbms_output.put_line('文件已打开');
end if;
end;


13、过程fileopen
说明:打开bfile所对应的os文件。
语法:dbms_Lob in out nocopy bfile,open_mode in binary_integer:=file_readonly);
其中,open_mode指定文件的打开模式。注意os文件只能以只读方式打开。
例子:
declare
  file1 bfile;
begin
file1:=bfilename('G','readme.doc');
if dbms_lob.fileexists(file1)=1 then
 dbms_Lob.fileopen(file1);
 dbms_output.put_line('文件已经打开');
end if;
dbms_lob.fileclose(file1);
end;


14、过程freetemporary
说明:用于释放在魔人临时表空间中的临时lob。
语法:dbsm_lob.freetemporary(lob_loc in out nocopy blob/clob/nclob);
其中lob_loc用于指定lob定位符。
declare
  src_lob clob;
begin
dbms_lob.createtemporary(src_lob,true);
sec_lob:='中华人民共和国';
dbms_lob.freetemporary(src_lob);
end;


15、函数getchunksize
说明:当建立包含clob列或blob列的表时,通过指定chunk参数可以指定操作lob需要分配的字节数(该值是数据块尺寸的整数倍),
如果不指定该参数,其魔人值为数据块的尺寸。通过使用函数getchunksize,可以取得chunk参数所对应的值。
语法:dbms_lob.getchunksize(lob_loc in blob/clob/nclob) return integer;
例子:
declare
  src_lob clob;
  chunksize int;
begin
  src_lob:='中华人民共和国';
  chunksize:=dbms_lob.getchunksize(src_lob);
  dbms_output.put_line('chunk'||chunksize);
end;


16、函数getlength
说明:用于取得lob数据的实际长度,适用于clob\blob\bfile。
语法:dbms_lob.getlength(lob_loc in blob/clob/nclob) return integer;
例子:
declare
  file1 bfile;
  length int;
begin
file1:=bfilename('G','readme.doc');
length:=dbms_lob.getlength(file1);
dbms_output.put_line(length);
end;


17、函数instr
说明:返回特定样式数据在lob中从某偏移位置开始第n次出现是的具体位置,适用于blob/clob/bfile。
语法:dbms_lob.instr(lob_loc in blob/clob/nclob/bfile,pattern in raw/varchar2,offset in integer:=1,nth in integer:=1) return integer;
其中pattern指定要搜索的字符串或者二进制数据,offset指定搜索的起始位置,nth指定第n次的出现次数。
例子:
declare
  src_lob clob;
  location int;
  offset int;
  occurence int;
begin
src_lob:='祖国、祖国,伟大的祖国';
offset:=2;
occurence:=2;
location:=dbms_lob.instr(src_lob,'祖国',offset,occurence);
dbms_output.put_line('从第'||offset||'字符开始,祖国第'||occurence||'次出现位置为'||location);
end;


18、函数isopen
说明:用于确定lob是否已经被打开,如果打开了则返回1,反之0,适用于blob/clob/bfile。
语法:dbms_lob.isopen(lob_loc in blob/clob/bfile) return integer;
例子:
declare
  src_lob clob;
begin
src_lob:='祖国、祖国,伟大的祖国';
if dbms_lob.isopen(src_lob)=0 then
 dbms_Lob.open(src_lob,1);
end if;
dbms_lob.colse(src_lob);
end;


19、函数istemporary
说明:用于确定lob定位符是否为临时lob,是则返回1,反之0。
语法:dbms_lob.istemporary(lob_loc in blob/clob/nclob) return integer;
例子:
declare
  src_lob clob;
begin
if dbms_lob.istemporary(src_lob)=1 then
 dbms_output.put_line('已经是临时lob');
else
 dbms_output.put_line('临时LOB需要建立');
 dbms_lob.createtemporary(src_lob,true);
end if;
dbms_lob.freetemporary(src_lob);
end;


20、过程loadfromfile
说明:用于将bfile的部分或者全部内容复制到目标lob变量(clob或者blob)中。
语法:dbms_lob.loadfromfile(
dest_lob in nocopy blob/clob,
src_file in bfile,amount in integer,
dest_offset in integer:=1,
src_offset in integer:=1);
其中,src_file指定bfile定位符,当bfile数据装载到clob中时,不会进行字符集转换,因此要确保bfile数据与数据库具有相同字符集,否则装载后的数据为乱码。
例子:
declare
  src_lob bfile;
  dest_lob clob;
  amount int;
begin
  src_lob:=bfilename('G','a.txt');
  dbms_lob.createtemporary(dest_lob,true);
  dbms_lob.fileopen(src_lob,0);
  amount:=dbms_lob.getlength(src_lob);
  dbms_lob.loadfromfile(dest_lob,src_lob,amount);
  dbms_lob.fileclose(src_lob);
  dbms_lob.freetemporary(dest_lob);
end;


21、过程loadblobfromfile
说明:将bfile数据装载到blob中,并且在装载后可以取得新的偏移位置
语法:
dbms_lob.loadblobfromfile(
dest_lob in out nocopy blob,src_bfile in bfile,
amount in integer,dest_offset in out integer,
src_offset in out integer);
其中,src_bfile指定bfile定位符,dest_offset(in)指定目标lob的起始位置,dest_offset(out)用于取得装载完成后的偏移位置,
src_offset(in)指定bfile定位符的起始位置,src_offset(out)用于取得bfile读取完成后的偏移位置。
例子:
declare
  src_lob bfile;
  dest_lob blob;
  amount int;
  src_offset int:=1;
  dest_offset int:=1;
begin
src_lob:=bfilename('G','a.txt');
dbms_lob.createtemporary(dest_lob,true);
dbms_lob.fileopen(src_lob,0);
amount:=dbms_lob.getlength(src_lob);
dbms_lob.loadblobfromfile(dest_lob,src_lob,amount,dest_offset,src_offset);
dbms_lob.fileclose(src_lob);
  dbms_lob.freetemporary(dest_lob);
  dbms_output.put_line(dest_offset);
end;


22、过程loadclobfromfile
说明:用于将bfile数据装载到clob中,可以指定字符集id号,并进行字符集装换。
语法:
dbms_lob.loadclobfromfile(dest_lob in out nocopy clob,
src_bfile in bfile,amount in integer,
dest_offset in out integer,src_offset in out integer,
src_csid in number,lang_context in out integer,warning out integer);
其中,src_csid指定源文件的字符集id号,lang_context(in)指定语言上下文,
lang_context(out)用于取得先前装载的语言上下文,warning用于取得警告消息。
例子:
declare
  src_lob bfile;
  dest_lob clob;
  amount int;
  src_offset int:=1;
  dest_offset int:=1;
  csid int:=0;
  lc int:=0;
  warning int;
begin
src_lob:=bfilename('G','a.txt');
dbms_lob.createtemporary(dest_lob,true);
dbms_lob.fileopen(src_lob,0);
amount:=dbms_lob.getlength(src_lob);
dbms_lob.loadclobfromfile(dest_lob,src_lob,amount,dest_offset,src_offset,csid,lc,waring);
dbms_lob.fileclose(src_lob);
dbms_output.put_line(dest_lob);
dbms_lob.freetemporary(dest_lob);
end;


23、过程open
说明:该过程用于打开lob时指定lob的读写模式:只读(dbms_lob.lob_readonly)、读写(dbms_lob.lob_readwrite),适用于blob\clob\bfile。
语法:
dbms_lob.open(lob_loc in out nocopy blob/clob/bfile,open_mode in binary_integer);
其中,open_mode指定lob的读写模式。
例子:
declare
  src_lob clob;
  v1 varchar2(100):='中华人民共和国';
  amount in;
begin
amount:=length(v1);
dbms_lob.createtemporary(src_lob,true);
dbms_lob.open(src_lob,dbms_lob,lob_readwrite);
dbms_lob.write(src_lob,amount,1,v1);
dbms_lob.close(src_lob);
dbms_output.put_line(src_lob);
dbms_lob.freetemporary(src_lob);
end;


24、过程read
说明:用于将lob数据读取到缓冲区中,适用于blob\clob\bfile。
语法:
dbms_lob.read(lob_loc in blob/clob/bfile,amount in out nocopy binary_integer,offset in integer,buffer out raw/varchar2);
其中,从lob_loc中开始偏移offset,读取amount个;
amount(in)指定要读取的字节个数(blob)或字符个数(clob),amount(out)用于取得实际读取的字节个数或字符个数。
例子:
declare
  src_lob clob:='伟大的祖国';
  amount int;
  buffer varchar2(200);
  offset int:=1;
begin
amount:=dbms_lob.getlength(src_lob);
dbms_lob.open(src_lob,dbms_lob.lob_readonly);
dbms_lob.read(src_lob,amount,offset,buffer);
dbms_output.put_line(buffer);
dbms_lob.close(src_lob);
end;


25、函数substr
说明:用于返回lob中从指定位置开始的部分内容,适用于blob\clob\bfile.
语法:dbms_lob.substr(lob_loc in blob/clob/bfile,amount in integer :=32767,offset in integer:=1);
其中始于offset,长度为amount。
例子:
declare
  src_lob clob:='中国,中国,伟大的中国';
  amount int;
  v1 varchar2(200);
  offset int;
begin
amount:=10;
offset:=4;
v1:=dbms_lob.substr(src_lob,amount,offset);
dbms_output.put_line(v1);
end;


26、过程trim
说明:用于截断lob内容到指定长度,适用于blob\clob/nclob。
语法:dbms_lob.trim(lob_loc in out nocopy blob/clob/nclob,newlen in integer);
例子:
declare
  src_lob clob:='中国,中国,伟大的中国';
  amount int;
begin
amount:=5;
dbms_lob.trim(src_lob,amount);
dbms_output.put_line(src_lob);
end;


27、过程write
说明:用于将缓冲区数据写入到lob中的特定位置,适用于blob和clob。
语法:dbms_lob.write(lob_loc in out nocopy blob/clob,amount in binary_integer,offset in integer,buffer in raw/varchar2);
其中,buffer指定要写入的内容,读取amount到lob_loc,开始位置为offset.
例子:
declare
  src_lob clob:='我的祖国';
  amount int;
  offset int;
  buffer varchar2(100):='伟大的中国';
begin
offset:=dbms_lob.getlength(src_lob)+1;
amount:=length(buffer);
dbms_lob.write(src_lob,amount,offset,buffer);
  dbms_output.put_line(src_lob);
end;


28、过程writeappend
说明:用于将缓冲区数据写入到lob尾部,适用于blob\clob\nclob。
语法:
dbms_lob.writeappend(
lob loc in out nocopy blob/clob/nclob,
amount in binary_integer,buffer in raw);
例子:
declare
  src_lob clob:='我的祖国';
  amount int;
  buffer varchar2(100):=',伟大的祖国';
begin
amount:=length(buffer);
dbms_lob.writeappend(src_lob,amount,buffer);
dbms_output.put_line(src_lob);
end;




五、内部LOB(CLOB/BLOB)的使用
说明:clob存放不超过4g的文本数据;blob存放不超过4g的二进制数据(例如图片)。


1、建表
create table lob_example1(id number(6) primary key,name varchar2(10),resume clob);
create table lob_example2(id number(6) primary key,name varchar2(10),photo blob);


2、插入
说明:使用函数empty_clob()初始化clob列,函数empty_blob()初始化blob列
注意:函数empty_clob()/empty_blob()与null不同,尽管该函数没有提供任何数据,但却分配了lob定位符。
insert into lob_example1 values(1,'王鸣',empty_clob());
insert into lob_example1 values(2,'马丽',empty_clob());
insert into lob_example2 values(1,'王鸣',empty_blob());
insert into lob_example2 values(2,'马丽',empty_blob());


3、更新
说明:为clob列追加数据使用dbms_lob中的write或writeappend来完成。
declare
  lob_loc clob;
  text varchar2(200);
  amount int;
  offset int;
begin
select resume into lob_loc from lob_example1 where id=1 for update;
offset:=dbms_lob.getlength(lob_loc)+1;
text:='哈工大';
amount:=length(text);
dbms_lob.write(lob_loc,amount,offset,text);
commit;
end;


4、查询
说明:这里查询针对数据不大于2000字节的情况,使用dbms_lob.read读取数据。如果大于2000字节使用循环方式读取。
例子:
declare
  lob_loc clob;
  lobloc blob;
  buffer varchar2(200);
  buffer2 raw(2000);
  amount int;
  offset int:=1;
begin
--clob
select resume into lob_loc from lob_example1 where id=1;
amount:=dbms_lob.getlength(lob_loc);
dbms_lob.read(lob_loc,amount,offset,buffer);--从第1个字符开始的所有数据
dbms_output.put_line(buffer);
--blob
select photo into lobloc from lob_example2 where id=1;
amount:=dbms_lob.gerlength(lobloc);
dbms_lob.read(lob_loc,amount,offset,buffer);
end;


5、将文本文件内容写入到clob列/将二进制文件内容写入到blob列
说明:将文本文件内容写入到clob中需要使用过程dbms_lob.loadfromfile或dbms_lob.loadclobfromfile,为了避免字符集问题建议使用loadclobfromfile。
将二进制文件内容写入到blob中使用dbms_lob.loadblobfromfile。
例子:
declare
  lobloc clob;
  lobloc2 blob;
  fileloc bfile;
  amount int;
  src_offset int:=1;
  dest_offset int:=1;
  csid int:=0;
  lc int:=0;
  waring int;
begin
--clob
fileloc:=bfilename('G','马丽.txt');
dbms_lob.fileopen(fileloc,0);
amount:=dbms_lob.getlength(fileloc);
select sesume into lobloc from lob_example1 where id=2 for update;
dbms_lob.loadclobfromfile(lobloc,fileloc,amount,dest_offset,src_offset,csid,lc,waring);
dbms_lob.fileclose(fileloc);
commit;
--bloc
select photo into lobloc2 from lob_example2 where id=1 for update;
fileloc:=bfilename('G','马丽.bmp');
dbms_lob.fileopen(fileloc,0);
amount:=dbms_lob.getlength(fileloc);
dbms_lob.loadblobfromfile(lobloc2,fileloc,amount,dest_offset,src_offset);
dbms_lob.fileclose(fileloc);
commit;
end;


6、将clob列内容写入到文本文件/将blob列内容写入到二进制文件
说明:不仅需要使用dbms_lob包读取clob列的内容,而且需要使用utl_file包建立文本文件并写入内容。
例子:
declare
  lobloc clob;
  lobloc2 blob;
  amount int;
  offset int:=1
  buffer varchar2(2000);
  buffer2 raw(1000);
  handle utl_file.file_type;
begin
--clob
select resume into lobloc from lob_example1 where id=1;
amount:=dbms_lob.getlength(lobloc);
dbms_lob.read(lobloc,amount,offset,buffer);
handle:=utl_file.fopen('user_dir','a.txt','w',2000);
utl_file.put_line(bandle,buffer);
utl_file.fclose(handle);
--blob
select photo into lobloc2 from lob_example2 where id=1;
amount:=dbms_lob.getlength(lobloc2);
dbms_lob.read(lobloc2,amount,offset,buffer);
handle:=utl_file.fopen('user_dir','a.bmp','w',1000);
utl_file.put_rwa(bandle,buffer);
utl_file.fclose(handle);
end;




六、外部LOB(BFILE)的使用
说明:为了在数据库中访问OS文件的数据,需要使用bfile类型。需要注意,bfile所对应的OS文件内容只能读取,不能修改。
使用bfile类型访问OS文件是,必须首先建立directory对象,而建立此对象要求用户有create any directory权限。
例子:
conn system/manager
grant create any directory to scott;
conn scott/tiger
create directory bfile_dir as 'G:\BFILE_EXAMPLE';
当建立directory对象时,一定要确保OS目录已经存在。如果目录不存在建立时不会显示错误,当依据该directory对象访问OS文件时才会报错误。
建立了directory对象后,就可以使用bfile类型访问OS文件了。


1、建表
说明:在表中访问OS文件需要使用bfile。
create table lob_example3(id number(6) primary key,name varchar2(10),resume bfile);


2、插入
说明:使用bfilename()来初始化bfile列。当使用此函数时,directory对象必须使用大写。
insert into lob_example3 values(1,'王鸣',bfilename('BFILE_DIR','王鸣.TXT'));
insert into lob_example3 values(2,'马丽',bfilename('BFILE_DIR','马丽.TXT'));


3、查询
说明:使用dbms_lob.read读取,用raw变量接收。
declare
  buffer raw(2000);
  amount int;
  offset int;
  lobloc bfile;
begin
select resume into lobloc from lob_example3 where id=2;
dbms_lob.fileopen(lobloc,0);
amount:=dbms_lob.getlength(lobloc);
offset:=1;
dbms_lob.read(lobloc,amount,offset,buffer);
dbms_lob.fileclose(lobloc);

end;


转自:https://blog.youkuaiyun.com/bbliutao/article/details/19707169

车辆TBOX科普 第69次 TBOX行业发展趋势与就业前景深度解析 TBOX技术革新驱动汽车智能化发展 Telematics BOX(TBOX)正快速从车辆状态监控器进化为整车智能核心,市场年增速超25%,2025年规模将达150亿美元。技术呈现四大革新方向:5G与V2X集成实现多模通信网关,支持10-20Gbps高速传输;多模GNSS融合定位精度达厘米级,北斗系统提供独特优势;边缘计算架构使TBOX具备本地AI处理能力,减少95%数据上传;硬件安全模块(HSM)成为标配,满足EVITA标准的安全需求。这些技术突破正重塑TBOX架构,使其从单纯通信管道升级为智能网联汽车的关 阅读详情

相关推荐

Ubuntu 22.04 上 Mezzanine CMS 完整安装指南

CMS(内容管理系统)是构建博客、企业官网等静态与动态内容混合站点的核心技术栈;Django 作为 Python 生态中最成熟的 Web 框架,凭借其 ORM、Admin 和安全机制,成为 CMS 开发的首选基础。Mezzanine 是基于 Django 的轻量级 CMS,以开箱即用、零配置多语言和内置 SEO 工具为特色,特别适合中小项目快速落地。在 Ubuntu 这类强调稳定性的服务器操作系统上部署时,关键挑战并非代码逻辑,而是系统层依赖协同——如 Python 版本锁定、SQLite FTS5 支持、

weixin_33508411的博客 304

Oracle LOB数据类型专题

Oracle LOB数据类型专题 一、概述 LOB数据类型专门用于存储大对象的数据,不超过4G字节,包括大文本、图像图像、视频剪切等。 Oracle8之前使用LONG、LOBG RAW来实现,现慢慢淘汰,8开始使用LOB实现。

基于Oracle11G 9656

关于动态存储器dram中rank,bank,device之间的关系

DEVICE_WIDTH表示设备的带宽(单位bit),每个列(column)包含DEVICE_WIDTH 位(bit),每一行(row)包含NUM_COLS个column。   而每一个bank包含NUM_ROWS个行(row)。所以一个设备(device)的存储容量为PER_DEVICE_STORAGE =NUM_ROWS*NUM_COLS*DEVICE_WIDTH*NUM_BANKS (i

wyj7260的专栏 4732

使用dbms_lob.compare比对lob字段

以前写了一个通过dbms_lob.getlength来比对lob长度的脚本,后来通过实践发现有点问题,发现很多长度一样的lob但是内容可能不一样,oracle目前只有使用dbms_lob.compare来比对lob字段,但是这个有个局限就是不能使用dblink来比对两个库的lob,下面是一个举例脚本,通过两张表tb1和tb2通过主键id来进行lob的比对 如果发现lob不一致,则打印出id号

Brent的专栏 5542

RTC温度补偿:如何让时间分秒不差?

RTC(实时时钟)温度补偿技术通过"检测温度→计算误差→动态调整频率"的闭环机制,解决振荡器频率随温度变化导致的时间误差问题。核心步骤包括:1)高精度温度检测;2)基于温度-频率误差模型计算偏差;3)通过硬件(可编程电容/DAC)或软件方式调整振荡频率。该技术需突破温度检测精度、误差模型拟合、频率调整分辨率等关键点,根据不同应用场景(消费电子±5ppm至军工±0.1ppm)选择匹配方案。典型实现如STM32的分段线性补偿算法,可将工业级RTC精度提升至±2ppm以内。

上市公司前技术负责人,20 年软硬件深耕 + 百人研发团队管理经验,名校理工科背景加持。从技术攻坚到团队掌舵,沉淀海量项目实战与管理心得,专注分享软硬件干货、疑难问题解决方案,既是靠谱知识传播者,也盼链接优质项目共成长。 1229

3DGS实战笔记:从相机坐标系到屏幕像素,手把手推导高斯椭球的投影变换矩阵

本文详细解析了3D高斯散射(3DGS)技术中从相机坐标系到屏幕像素的几何变换过程,重点推导了高斯椭球的投影变换矩阵。通过视图变换、投影变换和视口变换的完整流程,结合雅可比矩阵处理协方差矩阵,实现了高效的三维重建与渲染。文章提供了Python代码示例,帮助开发者深入理解3DGS的核心几何变换机制。

weixin_28691741的博客 438

Oracle - LOB(大对象数据类型)

在ORACLE数据库中,LOB(Large Objects(大对象))是用来存储大量的二进制和文本数据的一种数据类型。在Oracle8i中开始提供LOB字段,在Oracle10g前最多只能存储 4G 数据,从Oracle10g开始,可以存储 8-128T 的数据,取决于你的数据库的块大小。 LOB又分为两种类型: 内部LOB类型:将数据以字节流的形式存储在数据库的内部。因而,内部LOB

袭冷 8566

《低功耗方法学》翻译——第一章:介绍

第一章:介绍

记录所学,分享知识,结识挚友 2068

dbms_lob使用之-基础

 在Oracle中,存储在LOB中数据称为LOB的值,如使用Select 对某一LOB字段进行选择,则返回的不是LOB的值,而是该LOB字段的定位器(可以理解为指向LOB值的指针)。如执行如下的SQL语句: DELCARE AUDIO_INFO BLOB; BENGIN SELECT audio INTO AUDIO_...

weixin_30487201的博客 535

Chrome DevTools MCP 实战完整教程

本教程介绍了Chrome DevTools MCP(Model Context Protocol)在智能Web测试中的应用。该系统通过MCP协议将Chrome开发者工具能力标准化,并与AI结合,提供了统一的测试解决方案。核心功能包括智能自动化、深度调试分析和性能监控优化。教程详细讲解了环境搭建、MCP服务器配置、参数说明及多种工具集(输入自动化、导航、设备仿真、性能分析等)的使用方法。通过mcp-use库的MCPAgent和MCPClient组件,用户可以轻松实现自然语言驱动的浏览器操作和测试流程管理。

blues_C的博客 3804

【华为OD技术面试手撕真题】1、长度最小的子数组 | 手撕真题+思路参考+代码解析(C & C++ & Java & Python & JS)(三种解法)

【华为OD面试手撕真题】长度最小的子数组,本专栏更新每年华为OD机试的高频手撕代码题,每个题目都会使用五种语言进行解答(C & C++& Java & Python & JS),思路分析都非常详细, 实现最低的时间复杂度和高通过率,每个解题思路超过百字,内含各个编程语言的八股文面试题,欢迎大家订阅学习, 代码可以直接运行使用,全网限时最低价,持续更新

KJ.JK 1万+

oracle中lob类型学习

Oracle中支持4种类型的LOB(large object)CLOB:字符LOB。这种类型用于存储大量的文本信息,如xml或者只是纯文本。这个数据类型需要进行字符集转换,也就是说,在获取时,这个字段中的字符会从数据库的字符集转换为客户的字符集,而在修改时会总客户的字符集转换为数据库的字符集。NCLOB:这是另一种类型的LOB。存储在这一列中的数据所采用的字符集是数据库的国家字符集,而不是数据库的

李趣趣的学习笔记 418

指纹对抗指南:如何绕过Cloudflare与Akamai的5s盾与浏览器指纹检测

现在的CDN反爬技术虽然越来越强,但是道高一尺魔高一丈,只要掌握了指纹伪造、流量伪装、行为模拟这些核心技术,就可以绕过绝大多数的防护措施。对抗过程中要注意效率和成本的平衡,小规模爬取用Playwright+stealth最方便,大规模爬取用curl_cffi+代理池性价比最高,遇到验证码用打码平台或者自动识别服务,不需要死磕破解。本文介绍的方案已经在实战中验证过,可以绕过95%以上的Cloudflare/Akamai防护,成功率非常高。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 297

blob数据类型_一文看懂Oracle数据库lob大对象数据类型

概述今天主要对Oracle数据库lob大对象数据类型字段的详细讲解,介绍ORACLE提供的CLOB,NCLOB,BLOB,BFILE共四种LOB类型。LOB概念lob为Oracle数据库的一个大对象数据类型,可以存储超过4000bytes的字符串,二进制数据,OS文件等大对象信息.最大可存储的容量根oracle的版本和oracle 块大小有关.LOB分类分为内部LOB和外部LOB。内部LOB包括C...

weixin_39809140的博客 615

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

oracle lob 数据类型

LOB(large object)是一种用于存储大对象的数据类型,每个LOB可以有4GB。 LOB有三种类型: BLOB:Binary Large Object 二进制大型对象 CLOB:Character Large Object 单字符大型对象 Double-byte

稻草人的高粱地 2150

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Oracle LOB数据类型的处理

Oracle的Blob字段比较特殊,他比long字段的性能要好很多,可以用来保存例如图片之类的二进制数据。 写入Blob字段和写入其它类型字段的方式非常不同,因为Blob自身有一个cursor,你必须使用cursor对...

cjsq82346的博客 247

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Oracle | 大对象(LOB)数据类型

版本说明:Oracle 11g 今天再次与BLOB、CLOB相逢,此前没有详细的去文档查看,现将文档Oracle Database SQL Language ReferenceLOB部分的内容整理如下。 Large Object (LOB) Data Types 内置的LOB数据类型BLOB,CLOB和NCLOB(内部存储)和BFILE...

797

oracle 最大一条数据类型,Oracle数据库中的大对象(LOB)数据类型介绍

一、LOB数据类型的介绍大对象(LOB)数据类型允许我们保存和操作非结构化和半结构化数据,如文档、图形图像、视频片段、声音文件和XML文件等。DMBS_LOB 包被设计用于操作 LOB 数据类型。从 Oracle 12c 开始,根据数据库块大小,LOB 最大可以存储 128TB 的数据,一个表可以有一个或多个 LOB 数据类型的列,如 二进制大对象(BLOB)、字符大对象(CLOB)、国家字符大对...

weixin_32413167的博客 1164

oracle lob类型和mysql text_LOB数据类型

概述由于无结构的数据往往都是大型的,存储量非常大,而LOB(large object)类型主要用来支持无结构的大型数据.用户可以用LOB数据类型来存储大型的无结构数据,特别是文本,图形,视频和音频等多媒体数据,系统还提供了随机访问这些LOB类型数据的有效办法.LOB数据类型可以分为以下几种:Oracle sun mysql jdkBLOB:二进制LOB类型,用户存放无结构的二进制数据,最大4GB....

weixin_34381073的博客 472

运用C#处理lob数据类型 (Oracle)

导读:      运用C#处理lob数据类型(Oracle)   一、 介绍不规则数据类型   随着媒体技术的进步,人们的要求也越来越多,因此现在的数据库中不单单存储简单的数据类型,还可以存储图片、文件、声音等非常庞大的二进制数据,我们把这种不规则数据类型叫做LOB(Large Object)。对于LOB数据即可以存储50K还可以存储50M的二进制数据内容。   Oracle数据库中,大型数据类型

我为代码疯狂 2092

oracle lob类型和mysql text_【学习笔记】oracle lob大对象数据类型字段详解 总结lob 10大问题...

天萃荷净oracle研究中心学习笔记:分享一篇关于Oracle数据库lob大对象数据类型字段的详细讲解,介绍ORACLE提供了CLOB,NCLOB,BLOB,BFILE共四种LOB类型。何为LOB?lob为Oracle数据库的一个大对象数据类型,可以存储超过4000bytes的字符串,二进制数据,OS文件等大对象信息.最大可存储的容量根oracle的版本和oracle 块大小有关.有那几种可供选择...

weixin_32233079的博客 331

mysql rowid的数据类型_oracle数值类型--LOB+ROWID/UROWID

Oracle中支持4种类型的LOB:CLOB:字符LOB。存储大量的文本信息,如XML或者只是纯文本。这个数据类型需要进行字符集转换,也就是说,在获取时,这个字段中的字符会从数据库的字符集转换为客户的字符集,而在修改时会从客户的字符集转换为数据库的字符集。NCLOB:这是另一种类型的字符LOB。存储在这一列中的数据所采用的字符集是数据库的国家字符集,而不是数据库的默认字符集。BLOB:二进制LOB...

weixin_32515741的博客 828

ORACLE之 LOB 数据类型

LOB (Large Object)类型 LOB 类型专门用于存储大对象的数据。包括大文本、图形/图形、视频剪切等。最大可以存储 4G 字节的内容。   内部 LOB 的数据存储在数据库中,并且支持事务操作(提交、回退、保存点): CLOB: 和 ORACLE7 中的 LONG 类型相似,存储单字节字符数据。 NCLOB: 用来存储定宽多字节字符数据。 BLOB: 和 LONG RAW

東風¢芝彩™ 1551

《Oracle编程艺术》学习笔记(37)-数据类型-LOB

1) BLOB 二进制LOB。用于存储大量的二进制信息,不会进行字符集转换。 允许存储最多(4GB)×(创建LOB时指定的CHUNK参数,默认为数据库块大小)字节的数据。 2) CLOB 字符LOB。这种类型用于存储大量的文本信息,要进行字符集转换。 允许存储最多(4GB)×(创建LOB时指定的CHUNK参数,默认为数据库块大小)字节的数据。 3) NCLOB 存储用Unicode编

NowOrNever 2625

oracle 插入blob_一文看懂Oracle数据库lob大对象数据类型

概述今天主要对Oracle数据库lob大对象数据类型字段的详细讲解,介绍ORACLE提供的CLOB,NCLOB,BLOB,BFILE共四种LOB类型。LOB概念lob为Oracle数据库的一个大对象数据类型,可以存储超过4000bytes的字符串,二进制数据,OS文件等大对象信息.最大可存储的容量根oracle的版本和oracle 块大小有关.LOB分类分为内部LOB和外部LOB。内部LOB包括C...

weixin_36323601的博客 922
上一篇: Linux学习笔记如何发布一个简单网站一搭建一台NTP Server (八)
下一篇: ORACLE PL/SQL
白马非马啊
博客等级 码龄10年 13粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值