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

WS2812B非标准通信协议:手把手实现精准时序控制 详解WS2812B的精准时序实现原理,剖析其非标准通信协议的关键细节。通过实际操作指导,帮助开发者稳定驱动ws2812b灯带,解决常见时序偏差问题,提升项目显示效果与响应一致性。 阅读详情

相关推荐

红外热成像仪原理及应用

目录什么是红外热成像背景介绍热成像技术原理热成像分类红外热成像和夜视仪之间的区别红外热像仪夜视仪红外照明相机对比红外热像仪都能看透什么如何选择制冷型和非制冷型红外热像仪制冷型红外热像仪非制冷型红外热像仪实例对比成像速度空间分辨率灵敏度光谱滤波同步何如选择合适的红外热像仪像素测温范围和被测物温度分辨率空间分辨率温度稳定性热像仪的距离系数比常见热成像仪关键参数量程视场角 (FOV)红外分辨率热灵敏度(NETD)焦距光谱范围精度内置优化分析NTED(热灵敏度)什么是NETD如何测量NETD?NETD如何影响测量?

zhy295006359的博客 2万+

Oracle LOB数据类型专题

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

基于Oracle11G 9656

保姆级教程:在LKD3588开发板上为RK3588添加SC2210摄像头驱动(含完整DTS配置)

本文提供了一份详细的教程,指导如何在LKD3588开发板上为RK3588处理器添加SC2210摄像头驱动,包括完整的DTS配置和内核编译步骤。教程涵盖了环境准备、驱动文件添加、DTS配置详解、内核编译与烧录、驱动测试以及常见问题排查,帮助开发者快速实现SC2210传感器在RK3588平台上的集成与优化。

weixin_42641741的博客 480

使用dbms_lob.compare比对lob字段

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

Brent的专栏 5542

[cryoEM] cryoSPARC简介

cryoSPARC系统结构概述 cryoSPARC是一个后端和前端高性能计算软件系统,为单颗粒冷冻电镜提供数据处理和图像分析能力,以及丰富的基于浏览器的用户截面和命令行工具。 Master-worker模式 系统基于主用户模式。 主进程(web应用,核心应用程序和MongoDB数据库)一起在主节点上运行。主节点需要相对轻量级的资源(2+ CPU< 16GB+ RAM)。 工作程序进程可以在具有GPU的任何可用节点上生成,负责所有实际计算和数据处理,并由主节点调度。注意:同一节点可以同时充当主节点和辅

进阶中的程序员吃吃的博客 7797

MOOS-ivp 实验三 MOOS简介(3)

MOOS-ivp 实验三 MOOS简介(3) 继上一篇文章继续对实验进行记录 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录MOOS-ivp 实验三 MOOS简介(3)六、A Simple Example with pXRelay1.pXRelay基本使用2.pXRelay简单例子3.pXRelay实验七、First Experiments in Modifying MOOS App Code1.下载一个MOOS模板文件2.打开MOOS模板文件总结 六、A Simple E

weixin_44151170的博客 2534

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

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

袭冷 8566

从DDPM到DDIM:深入解读《Denoising Diffusion Implicit Models》

DDIM发表在ICRL2021上,是DDPM重要的改进之一,能显著提高DDPM的样本质量、减少采样时间,并且能显式控制插值,已经被广泛应用到现在的Diffusion Models上。这篇博客和大家一起详细解读一下DDIM,认识这一伟大的模型。.........

沉迷单车的追风少年 1万+

dbms_lob使用之-基础

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

weixin_30487201的博客 535

Python爬虫实战:百度贴吧帖子与评论抓取全攻略(附舆情分析技巧)

基础配置# 要爬取的贴吧名称(替换成自己需要的,比如“XX手游吧”)TIEBA_NAME = "XX手游"# 分页参数(每页50条帖子,可根据需求调整)PAGE_NUM = 3 # 爬取前3页帖子,共150条# 请求头(从浏览器复制自己的,更真实)Win64;

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

YOLOv13|损失函数优化篇:Focal EIOU 保持良好性能的同时,提供更高效的计算和更稳定的训练过程-包源码

Focal IoU与EIoU:目标检测中的损失函数优化 摘要:本文深入探讨了目标检测中两种重要的边界框回归损失函数优化方法。Focal IoU借鉴Focal Loss思想,通过(1-IoU)^γ因子调节损失权重,使模型更关注难样本(低IoU预测框),有效解决了传统IoU Loss对难易样本权重相同的问题。EIoU则在CIoU基础上改进,通过简化长宽比计算、分离宽高损失项,提升了计算效率和训练稳定性。两种方法分别从样本权重分配和损失函数结构优化角度,显著提升了目标检测性能,为实际应用提供了更高效的解决方案。文

FJN110的博客 1864

oracle中lob类型学习

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

李趣趣的学习笔记 418

基于Simulink的MIMO-OFDM系统仿真建模示例

MIMO概述MIMO技术利用多个天线进行信号发送和接收,通过空间复用来提高数据传输速率,或通过空间分集来增强信号的可靠性。OFDM概述OFDM是一种将高速率数据流分成多个低速数据流并行传输的技术,每个子载波都采用调制方式(如BPSK、QPSK),并通过IFFT/FFT变换实现串并转换。MIMO-OFDM优势结合了MIMO的空间分集增益与OFDM对抗多径效应的能力,适用于宽带无线通信系统。提供了更高的数据速率和更好的频谱效率,是现代无线通信标准(如4G LTE、5G NR等)的核心技术之一。

xiaoheshang_123的博客 327

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

oracle lob 数据类型

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

稻草人的高粱地 2150

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Oracle LOB数据类型的处理

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

cjsq82346的博客 247

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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、付费专栏及课程。

余额充值