當前位置:首頁 » 數據倉庫 » 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;