当前位置:首页 » 数据仓库 » oracle数据库二进制
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

oracle数据库二进制

发布时间: 2022-09-21 01:00:10

① 关于ORACLE数据库的类型!

1:
oracle数据类型:
1)number
Oracle里面没有int,所有的float,double,long,int类型都可以存储在Number类型的列中
2)char
定长,即数据的长度是固定的
3)varchar2
变长,即数据的长度是可变的
4)blob
二进制数据存储单位
2:
oracle里确实是没有boolean这种数据类型。
ep:
create
table
test(
id
number
primary
key,
sex
char(1),--指定长度
name
varchar2(40),
--长度上限是40,如果name长度没有40,则以实际长度给name分配空间,这样就省去了资源,因此,我们大多数情况下都使用这种。
money
number(6,2),
--这是一个double类型的数据,保留小数点后两位
blob
blob
--这是一个二进制数据。对于一些图形文件的存储大部使用这种数据类型。
);
主要的就是这几种数据类型了,其他的LZ脑补吧。。。

② 如何将二进制文件存入Oracle数据库中

先把文件读取到内存,再以二进制格式保持到数据库中的大字段中(clob或clob)。
写大对象。

Java code

public static void main(String[] args) {
// TODO Auto-generated method stub
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
OutputStream os = null;
FileInputStream fis = null;
int bs = 0;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oraDB","bigfou","---");
conn.setAutoCommit(false);
stat = conn.createStatement();
stat.executeUpdate("insert into t_video(id,video) values(1,empty_blob())");

rs = stat.executeQuery("select video from t_video where id = 1");
rs.next();
oracle.sql.BLOB blo = (oracle.sql.BLOB)rs.getBlob(1);
os = blo.getBinaryOutputStream();
bs = blo.getBufferSize();
fis = new FileInputStream("D:\\Temp\\MPlayer-CVS-20040808-K&K\\mplayer.exe");
byte[] buf = new byte[bs];
int length = 0;

while(true)
{
length = fis.read(buf);
if(length == -1) break;
os.write(buf,0,length);
}

os.close();
os = null;
fis.close();
fis = null;
conn.commit();
conn.setAutoCommit(true);
conn.close();
} catch(Exception ex) {
ex.printStackTrace();
}
}

读大对象

Java code

InputStream is = null;
FileOutputStream fos = null;
byte[] buf = null;
int bs = 0;

try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oraDB","bigfou","-");
conn.setAutoCommit(false);
stat = conn.createStatement();

rs = stat.executeQuery("select video from t_video where id = 1");
rs.next();
oracle.sql.BLOB blo = (oracle.sql.BLOB)rs.getBlob(1);
bs = blo.getBufferSize();
buf = new byte[bs];
int length = 0;
is = blo.getBinaryStream();
fos = new FileOutputStream("d:\\test.exe");

while(true) {
length = is.read(buf);
if(length == -1) break;
fos.write(buf,0,length);
}

fos.close();
fos = null;
is.close();
is = null;
conn.commit();
conn.setAutoCommit(true);
conn.close();
...

③ 怎么通过网页往Oracle数据库表里的BLOB字段添加二进制文件

更新数据的时候,写insert语句的时候,不更新blob字段,blob字段对应的数据用 empty_blob() 代替就行。

(注意:在执行上面那个 sql 之前,一定要把 connection 设置成不自动提交: conn.setAutoCommit(false); )

最后单独出来blob字段:
//把 blob 字段取出来
String sql = "select ANNEX from market_info_collect_t where info_id='"
+ infoId + "' for update ";
Statement stt=null;
stt = conn.createStatement();
rs = stt.executeQuery(sql);
if (rs.next()) {
blob = (oracle.sql.BLOB) rs.getBlob("ANNEX");
outStream = blob.getBinaryOutputStream();
instream = myFile.getContentStream();
byte[] data = new byte[instream.available()];
instream.read(data);
outStream.write(data, 0, data.length);
}
instream.close();
outStream.flush();
outStream.close();

④ ORACLE 存二进制用什么数据类型

可以用blob或bfile类型来存储该类二进制数据。具体说明如下: ★ blob:用来存储可变长度的二进制数据,blob数据在数据库之间或在客户机与服务器进程之间传递,yVSkyV

⑤ c#如何把图片,文本以二进制写入oracle数据库

上传
//新增文件之-----------存文件到数据库
public void attach(string filename,string fn,string username,string title )
{
Users.Class1 u=new Users.Class1();//得到用户ID
int uid = u.getUserID(username);
Papers.papers p = new papers();
int paper_id=p.getpaperid(title, uid);//得到论文ID
string sql = "update paper_table set attach=:aa,attachfilename=:bb where ID='"+paper_id+"'";
OracleCommand cmd = new OracleCommand(sql, conn);
conn.Open();
FileStream fs = File.OpenRead(filename);
byte[] b = new byte[fs.Length];
fs.Read(b, 0, b.Length);
fs.Close();

cmd.Parameters.Add("aa", System.Data.OracleClient.OracleType.BFile, b.Length).Value = b;
cmd.Parameters.Add("bb", System.Data.OracleClient.OracleType.VarChar).Value = fn;
cmd.ExecuteNonQuery();
conn.Close();
}
下载
先把下载好的二进制转换成以前存过数据库的格式,即刚存的时候要保存文件的扩展名,下载还原的时候用.
转换后的文件夹在临时的文件夹,后来直接response.redirect("*.*")就可以下载了.

//下载文件-收集于网上 只是注解-以下是针对Oracle数据库,SQL server一样
public string download(string pid,string path)
{

FileStream objFs;

BinaryWriter objBw;

int bufferSize = 260000;//这个是缓冲区大小,设置太小,小于下载的文件大小则会出错

byte [] outByte = new byte[bufferSize];

long retval;

long startIndex = 0;

string fileName = "";

string sql = "select * from paper_table where id='" + pid + "'";//从数据库取
OracleCommand cmd = new OracleCommand(sql, conn);
conn.Open();
OracleDataReader dr = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
dr.Read();

fileName = dr["attachfilename"].ToString();//文件名
string tempfilename = fileName;
fileName =path+fileName;
objFs = new FileStream(fileName, FileMode.OpenOrCreate,FileAccess.Write);

objBw = new BinaryWriter(objFs);

startIndex = 0;

retval = dr.GetBytes(8, startIndex, outByte, 0, bufferSize);

while ( retval == bufferSize)
{
objBw.Write(outByte);

objBw.Flush();

startIndex += bufferSize;

retval = dr.GetBytes(8, startIndex, outByte, 0, bufferSize);
}

objBw.Write(outByte, 0, (int)retval -1);

objBw.Flush();

objBw.Close();

objFs.Close();

dr.Close();

conn.Close();
return tempfilename;

}

⑥ oracle 数据类型

按类型分为:字符串类型、数字类型、日期类型、LOB类型、LONG RAW& RAW类型、ROWID & UROWID类型。

在讲叙字符串类型前,先要讲一下编码。字符串类型的数据可依编码方式分成数据库字符集(CHAR/VARCHAR2/CLOB/LONG)和国际字符集(NCHAR/NVARCHAR2/NCLOB)两种。数据库中的字符串数据都通过字符集将字符转换为数字后(二进制),才存储到数据块中。通过不同的编码集转换,即便是相同的字符,也可能会转换成不同的二进制编码。这也是产生乱码的原因。数据库的编码格式一般是在创建数据库时指定的。当然也可以修改数据库的编码。

一 字符串类型

1.1:CHAR类型 CHAR(size [BYTE | CHAR])

CHAR类型,定长字符串,会用空格填充来达到其最大长度。非NULL的CHAR(12)总是包含12字节信息。CHAR字段最多可以存储2,000字节的信息。如果创建表时,不指定CHAR长度,则默认为1。另外你可以指定它存储字节或字符,例如 CHAR(12 BYTYE) CHAR(12 CHAR).一般来说默认是存储字节

注意:数据库的NLS_CHARACTERSET 为AL32UTF8,即一个汉字占用三到四个字节。如果NLS_CHARACTERSET为ZHS16GBK,则一个字符占用两个字节。

1.2: NCHAR类型

这是一个包含UNICODE格式数据的定长字符串。NCHAR字段最多可以存储2,000字节的信息。它的最大长度取决于国家字符集。

1.3 VARCHAR类型

不要使用VARCHAR数据类型。使用VARCHAR2数据类型。

1.4: VARCHAR2类型

变长字符串,与CHAR类型不同,它不会使用空格填充至最大长度。VARCHAR2最多可以存储4,000字节的信息。

1.5: NVARCHAR2类型

这是一个包含UNICODE格式数据的变长字符串。 NVARCHAR2最多可以存储4,000字节的信息。

二. 数字类型

2.1 NUMBER类型

NUMBER(P,S)是最常见的数字类型,可以存放数据范围为10130~10126(不包含此值),需要1~22字节(BYTE)不等的存储空间。

P 是Precison的英文缩写,即精度缩写,表示有效数字的位数,最多不能超过38个有效数字

S是Scale的英文缩写,可以使用的范围为-84~127。Scale为正数时,表示从小数点到最低有效数字的位数,它为负数时,表示从最大有效数字到小数点的位数

下面是官方文档的示例

Actual Data Specified As Stored As
123.89 NUMBER 123.89
123.89 NUMBER(3) 124
123.89 NUMBER(6,2) 123.89
123.89 NUMBER(6,1) 123.9
123.89 NUMBER(3) 124
123.89 NUMBER(4,2) exceeds precision
123.89 NUMBER(6,-2) 100
.01234 NUMBER(4,5).01234
.00012 NUMBER(4,5) .00012
.000127 NUMBER(4,5) .00013
.0000012 NUMBER(2,7) .0000012
.00000123 NUMBER(2,7) .0000012
1.2e-4 NUMBER(2,5) 0.00012
1.2e-5 NUMBER(2,5) 0.00001
2.2 INTEGER类型

INTEGER是NUMBER的子类型,它等同于NUMBER(38,0),用来存储整数。若插入、更新的数值有小数,则会被四舍五入。

2.3 浮点数

Oracle 数据库提供了专为浮点数的两种数值数据类型:

BINARY_FLOAT

BINARY_FLOAT 是 32 位、 单精度浮点数字数据类型。可以支持至少6位精度,每个 BINARY_FLOAT 的值需要 5 个字节,包括长度字节。

BINARY_DOUBLE

BINARY_DOUBLE 是为 64 位,双精度浮点数字数据类型。每个 BINARY_DOUBLE 的值需要 9 个字节,包括长度字节。

在数字的列中,浮点数有小数精度。在 BINARY_FLOAT 或 BINARY_DOUBLE 的列中,浮点数有二进制的精度。二进制浮点数支持的特殊值无穷大和 NaN (不是数字)。

2.5 FLOAT类型

FLOAT类型也是NUMBER的子类型。

Float(n),数 n 指示位的精度,可以存储的值的数目。N 值的范围可以从 1 到 126。若要从二进制转换为十进制的精度,请将 n 乘以 0.30103。要从十进制转换为二进制的精度,请用 3.32193 乘小数精度。126 位二进制精度的最大值是大约相当于 38 位小数精度。

三. 日期类型

日期类型用于存储日期数据,但是并不是使用一般的格式(2012-08-08)直接存储到数据库的。

3.1 DATE类型

DATE是最常用的数据类型,日期数据类型存储日期和时间信息。虽然可以用字符或数字类型表示日期和时间信息,但是日期数据类型具有特殊关联的属性。为每个日期值,Oracle 存储以下信息: 世纪、 年、 月、 日期、 小时、 分钟和秒。一般占用7个字节的存储空间。

3.2 TIMESTAMP类型

这是一个7字节或12字节的定宽日期/时间数据类型。它与DATE数据类型不同,因为TIMESTAMP可以包含小数秒,带小数秒的TIMESTAMP在小数点右边最多可以保留9位

3.3 TIMESTAMP WITH TIME ZONE类型

这是TIMESTAMP类型的变种,它包含了时区偏移量的值

3.4 TIMESTAMP WITH LOCAL TIME ZONE类型

3.5 INTERVAL YEAR TO MOTH

3.6 INTERVAL DAY TO SECOND

四. LOB类型

内置的LOB数据类型包括BLOB、CLOB、NCLOB、BFILE(外部存储)的大型化和非结构化数据,如文本、图像、视屏、空间数据存储。BLOB、CLOB、NCLOB类型

4.1 CLOB 数据类型

它存储单字节和多字节字符数据。支持固定宽度和可变宽度的字符集。CLOB对象可以存储最多 (4 gigabytes-1) * (database block size) 大小的字符

4.2 NCLOB 数据类型

它存储UNICODE类型的数据,支持固定宽度和可变宽度的字符集,NCLOB对象可以存储最多(4 gigabytes-1) * (database block size)大小的文本数据。

4.3 BLOB 数据类型

它存储非结构化的二进制数据大对象,它可以被认为是没有字符集语义的比特流,一般是图像、声音、视频等文件。BLOB对象最多存储(4 gigabytes-1) * (database block size)的二进制数据。

4.4 BFILE 数据类型

二进制文件,存储在数据库外的系统文件,只读的,数据库会将该文件当二进制文件处理

五. RAW & LONG RAW类型

5.1 LONG类型

它存储变长字符串,最多达2G的字符数据(2GB是指2千兆字节, 而不是2千兆字符),与VARCHAR2 或CHAR 类型一样,存储在LONG 类型中的文本要进行字符集转换。ORACLE建议开发中使用CLOB替代LONG类型。支持LONG 列只是为了保证向后兼容性。CLOB类型比LONG类型的限制要少得多。 LONG类型的限制如下:

1.一个表中只有一列可以为LONG型。(Why?有些不明白)

2.LONG列不能定义为主键或唯一约束,

3.不能建立索引

4.LONG数据不能指定正则表达式。

5.函数或存储过程不能接受LONG数据类型的参数。

6.LONG列不能出现在WHERE子句或完整性约束(除了可能会出现NULL和NOT NULL约束)

5.2 LONG RAW 类型,能存储2GB 的原始二进制数据(不用进行字符集转换的数据)

5.3 RAW类型

用于存储二进制或字符类型数据,变长二进制数据类型,这说明采用这种数据类型存储的数据不会发生字符集转换。这种类型最多可以存储2,000字节的信息

六. ROWID & UROWID类型

在数据库中的每一行都有一个地址。然而,一些表行的地址不是物理或永久的,或者不是ORACLE数据库生成的。

例如,索引组织表行地址存储在索引的叶子,可以移动。

例如,外部表的ROWID(如通过网关访问DB2表)不是​​标准的ORACLE的rowid。

ORACLE使用通用的ROWID(UROWIDs)的存储地址的索引组织表和外表。索引组织表有逻辑urowids的,和国外表的外urowids。UROWID这两种类型的存储在ROWID伪(堆组织的表的物理行id)。

创建基于逻辑的rowid在表中的主键。逻辑的rowid不会改变,只要主键不改变。索引组织表的ROWID伪UROWID数据类型。你可以访问这个伪列,你会堆组织表的ROWID伪(即使用一个SELECT …ROWID语句)。如果你想存储的rowid索引组织表,那么你就可以定义一列的表型UROWID到列检索值的ROWID伪。

⑦ 存放在oracle的二进制文件怎么判断文件类型

你所取得的是二进制的格式,是byte[]形式的,这样你对照下表即可。
它们的格式是你判断的依据:

1.JPEG
- 文件头标识 (2 bytes): $ff, $d8 (SOI) (JPEG 文件标识)
- 文件结束标识 (2 bytes): $ff, $d9 (EOI)

2.TGA
- 未压缩的前5字节 00 00 02 00 00
- RLE压缩的前5字节 00 00 10 00 00

3.PNG
- 文件头标识 (8 bytes) 89 50 4E 47 0D 0A 1A 0A

4.GIF
- 文件头标识 (6 bytes) 47 49 46 38 39(37) 61
G I F 8 9 (7) a

5.BMP
- 文件头标识 (2 bytes) 42 4D
B M

6.PCX
- 文件头标识 (1 bytes) 0A

7.TIFF
- 文件头标识 (2 bytes) 4D 4D 或 49 49

8.ICO
- 文件头标识 (8 bytes) 00 00 01 00 01 00 20 20

9.CUR
- 文件头标识 (8 bytes) 00 00 02 00 01 00 20 20

10.IFF
- 文件头标识 (4 bytes) 46 4F 52 4D
F O R M

11.ANI
- 文件头标识 (4 bytes) 52 49 46 46
R I F F

⑧ 怎样在Oracle中,用PlSql往数据库中插入二进制文件

插入数据分为两种情况,一种是用insert into ...values 的语法,一种是用insert into select ...的语法。
举例:
如test表中有如下数据:

插入一条id为6,name为杨七的数据。

1
2

insert into test values (6,'杨七');
commit;

此时表中数据为:

另,要求向表中复制一条目前表中id为1的数据,可用如下语句:

1
2

insert into test select * from test where id=1;
commit;

此时表中数据为:

注意:在执行insert语句后,必须提交,即commit,否则插入结果只在当前session有效,重新开启另外的session会插入不成功。

⑨ 服务器上的oracle数据库proct目录在哪里

一般是在F:app你的计算机名proct11.2.0dbhome_1jdbclib。
orade数据库:所有的关系型数据库存储数据的集合就是磁盘中的文件。Oracle 数据库其实就是一组文件的集合。Oracle 数据库分别由:数据文件、控制文件、日志文件所构成。 1.1数据文件(.DBF): 数据文件是一个二进制文件,是用于保存用户应用程序数据和 Oracle 系统内部数据的文件,这些文件在操作系统中就是普通的操作系统文件。Oracle 在创建表空间的同时会创建数据文件。 1.2控制文件(.CTL):控制文件是一个二进制文件,它主要记录数据库的名称、数据库的数据文件存放位置等信息。一个控制文件只能属于一个数据库。如果控制文件丢失,这数据库就无法操作。 1.3日志文件(.LOG):日志文件在 Oracle 数据库中分为重做日志(Redo Log File)文件和归档日志文件两种。重做日志文件是 Oracle 数据库正常运行不可缺少的文件。重做日志文件主要记录了数据库操作过程。用于备份和还原数据库,以达到数据库的最新状态。

⑩ 怎么将oracle数据库存的二进制转换十进制

--十进制转其他进制函数
create or replace function to_base( p_dec in number, p_base in number )
return varchar2
is
l_str varchar2(255) default NULL;
l_num number default p_dec;
l_hex varchar2(16) default '0123456789ABCDEF';
begin
if ( trunc(p_dec) <> p_dec OR p_dec < 0 ) then
raise PROGRAM_ERROR;
end if;
loop
l_str := substr( l_hex, mod(l_num,p_base)+1, 1 ) || l_str;
l_num := trunc( l_num/p_base );
exit when ( l_num = 0 );
end loop;
return l_str;
end to_base;
--其他进制转十进制
create or replace function to_dec ( p_str in varchar2, p_from_base in number default 16 )
return number
is
l_num number default 0;
l_hex varchar2(16) default '0123456789ABCDEF';
begin
for i in 1 .. length(p_str) loop
l_num := l_num * p_from_base + instr(l_hex,upper(substr(p_str,i,1)))-1;
end loop;
return l_num;
end to_dec;