数据类型
类型 |
描述 |
BLOB |
二进制大对象类型 |
CLOB |
字符大对象类型 |
DATE |
同时显示日期和时间 |
NUMBER(p [,s]) |
数字类型并指定精度 |
VARCHAR2(N)、NVARCHAR2(N) |
变长字符串 |
ROWID |
获取一条记录的一个相对唯一地址值 |
BINARY_FLOAT |
单精度精度二进制浮点类型 |
BINARY_DOUBLE |
双精度二进制浮点类型 |
BINARY_FLOAT |
浮点数类型 |
BFILE |
用于存储操作系统中的物理文件数据对象 |
DATETIME |
DATETIME[n]用于设置显示毫秒后面的多少位,n表示获取的位数,取值为1~6。 |
create table mytable(id blob);
create table mytable(id clob);
create table mytable (dd date);
insert into mytable values(current_timestamp);
select * from mytable;
create table mytable (dd number(20,3));
create table mytable (dd varchar2(20));
create table mytable (dd NVARCHAR2(10));
create table mytable (dd rowid);
create table mytab (name1 BINARY_DOUBLE);
create table mytab (name1 BINARY_FLOAT);
create table test(id int, val binary_float);
insert into test values (1, 1.25),(2, 8.234), (3, 0.1234);
1、创建directory对象
create directory d_bfile as '/tmp/data/bfiletest';
2、创建包含bfile数据类型列的表
create table testbfile(id number,bfile_name bfile);
3、将bfilename函数构造的数据插入到表中
insert into testbfile values(1,bfilename('d_file', 'bfile.data'));
4、从表中读取数据,调用dbms_lob接口对数据进行操作
select dbms_lob.getlength(bfile_name) from testbfile where id=1;
select dbms_lob.fileopen(bfilename('d_file', 'bfile.data'),0);
select dbms_lob.read(bfilename('d_bfile','bfile.data'), 1, 0, '');
set serveroutput on;
create or replace function f_read_bfile() returns void as $$
declare
buff raw;
amount int := 0 ;
offset int :=0;
lob_loc bfile;
filesize int;
begin
select bfile_name into lob_loc from testbfile1 where id=1;
--打开BFILE文件
dbms_lob.fileopen(lob_loc,0);
--获取文件大小
filesize := dbms_lob.getlength(lob_loc);
raise notice 'amount:%',amount;
--读取文件全部内容
amount = filesize;
dbms_lob.read(lob_loc,amount,0,buff);
dbms_output.put_line('file data:');
dbms_output.put_line(utl_raw.cast_to_varchar2(buff));
--读取文件前8字节内容
amount = 8;
dbms_lob.read(lob_loc,amount,offset,buff);
dbms_output.put_line('First eight bytes:');
dbms_output.put_line(utl_raw.cast_to_varchar2(buff));
--读取文件剩余内容
offset = amount;
amount = filesize - mount;
dbms_lob.read(lob_loc,amount,offset,buff);
dbms_output.put_line('The rest bytes:');
dbms_output.put_line(utl_raw.cast_to_varchar2(buff));
--关闭bfile文件
dbms_lob.fileclose(lob_loc);
return;
end;
$$ language plpgsql;
--实际的返回结果应是将文件bfile.data中的对应长度的内容打印到界面
select f_read_bfile();
--bfile数据修改示例
update bfiletest set bfile_name=bfilename('d_bfile',bfile.data') where id=1;