Oracle blob转long raw测试
oracle--导出、导入blob类型的字段

oracle--导出、导⼊blob类型的字段以下操作记录了blob字段的导出、导⼊⽅法流程。
⽅法原理:利⽤UTL_FILE将blob字段的内容以⼆进制的形式导出到txt⽂档,然后⽤dbms_blob将⽂档内容导⼊到指定的数据库表中。
1、创建⼀个⽂本⽂档来保存blob数据。
这⾥在E盘home/dhl下创建⼀个名为text.txt的⽂件。
2、创建oracle临时⽬录1create or replace directory UTL_FILE_DIR as'E:/home/dhl/';2GRANT read ,write ON DIRECTORY UTL_FILE_DIR TO PUBLIC;注意: ⽬录下⾯要有text.txt的⽂件3、导出blob数据这⾥以SVS.SVS_ACCADM_SEALINFO表这张数据表为例⼦,其中的SEAL就是BLOB类型的字段1DECLARE2 file_handle UTL_FILE.FILE_TYPE;3 b_lob BLOB;4BEGIN5select SEAL into b_lob from SVS.SVS_ACCADM_SEALINFO where ID='100007922';67 file_handle := utl_file.fopen('UTL_FILE_DIR', 'test.txt', 'WB');8 utl_file.put_raw(file_handle , b_lob, true);9 UTL_FILE.FCLOSE(file_handle);10END;执⾏完后,会把这条数据的BLOB类型的数据以⼆进制的形式写⼊到了text.txt的⽂件中。
4、将⽂档内容导⼊到指定的数据库表中1DECLARE2 b_file bfile;3 b_lob BLOB;4BEGIN5--return a into b_lob将该列与⼀个blog类型的变量绑定在⼀起,以后只要为b_lob赋值,即等于将该值插⼊了表中6INSERT7INTO SVS.SVS_ACCADM_SEALINFO8 (9 ID,10 SEAL,11 SMALL_CODE,12 SEAL_TYPE,13 START_DATE,14 END_DATE,15 NO_USE_DATE,16 MEMO,17 SEAL_POSITION,18 ACC_NO,19 SEAL_CARD_ID,20 SEAL_CARD_NO,21 DOC_OBJECT_ID,22 CRUD_FLAG23 )24VALUES25 (26'100007922',27 EMPTY_BLOB(),28NULL,29'P',30'2019-11-26',31NULL,32NULL,33NULL,34NULL,35'2019112601',36'1199129990231314433',37'100003981',38'e19b7edfcdee436598367485605921cc57226621258',39'4'40 )41RETURN SEAL42INTO b_lob;43--将⽂件转换为bfile44 b_file := bfilename('UTL_FILE_DIR', 'test.txt');45 dbms_lob.open(b_file, dbms_lob.file_readonly);46-- 将b_file中的内容转换到b_lob47 dbms_lob.loadfromfile(b_lob,b_file,dbms_lob.getlength(b_file));48 dbms_lob.close(b_file);49COMMIT;50END;。
ORACLE常用数据库类型(转)

ORACLE常⽤数据库类型(转)oracle常⽤数据类型1、Char定长格式字符串,在数据库中存储时不⾜位数填补空格,它的声明⽅式如下CHAR(L),L为字符串长度,缺省为1,作为变量最⼤32767个字符,作为数据存储在ORACLE8中最⼤为2000。
不建议使⽤,会带来不必要的⿇烦a、字符串⽐较的时候,如果不注意(char不⾜位补空格)会带来错误b、字符串⽐较的时候,如果⽤trim函数,这样该字段上的索引就失效(有时候会带来严重性能问题)c、浪费存储空间(⽆法精准计算未来存储⼤⼩,只能留有⾜够的空间;字符串的长度就是其所占⽤空间的⼤⼩)2、Varchar2/varchar⽬前VARCHAR是VARCHAR2的同义词。
⼯业标准的VARCHAR类型可以存储空字符串,但是oracle不这样做,尽管它保留以后这样做的权利。
Oracle⾃⼰开发了⼀个数据类型VARCHAR2,这个类型不是⼀个标准的VARCHAR,它将在数据库中varchar列可以存储空字符串的特性改为存储NULL值。
如果你想有向后兼容的能⼒,Oracle建议使⽤VARCHAR2⽽不是VARCHAR。
不定长格式字符串,它的声明⽅式如下VARCHAR2(L),L为字符串长度,没有缺省值,作为变量最⼤32767个字节,作为数据存储在ORACLE8中最⼤为4000。
在多字节语⾔环境中,实际存储的字符个数可能⼩于L值,例如:当语⾔环境为中⽂(SIMPLIFIED CHINESE_CHINA.ZHS16GBK)时,⼀个VARCHAR2(200)的数据列可以保存200个英⽂字符或者100个汉字字符;对于4000字节以内的字符串,建议都⽤该类型a。
VARCHAR2⽐CHAR节省空间,在效率上⽐CHAR会稍微差⼀些,即要想获得效率,就必须牺牲⼀定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。
b。
VARCHAR2虽然⽐CHAR节省空间,但是如果⼀个VARCHAR2列经常被修改,⽽且每次被修改的数据的长度不同,这会引起‘⾏迁移’(Row Migration)现象,⽽这造成多余的I/O,是数据库设计和调整中要尽⼒避免的,在这种情况下⽤CHAR代替VARCHAR2会更好⼀些。
(转)Oracle中LONGRAWBLOBCLOB类型介绍

(转)Oracle中LONGRAWBLOBCLOB类型介绍RAW:未加⼯类型,可存储⼆进制数据或字节符LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长⽂本⼀个表中最多⼀个LONG列【不建议使⽤】LONG RAW: 可变长⼆进制数据,最长2G 【不建议使⽤】CLOB: 字符⼤对象Clob ⽤来存储单字节的字符数据;⼤型⽂本,例如XML数据。
NCLOB: ⽤来存储多字节的字符数据BLOB: ⽤于存储⼆进制⼤对象数据;例如数码照⽚;BFILE: 存储在⽂件中的⼆进制数据,这个⽂件中的数据只能被只读访。
但该⽂件不包含在数据库内。
bfile字段实际的⽂件存储在⽂件系统中,字段中存储的是⽂件定位指针.bfile对oracle来说是只读的,也不参与事务性控制和数据恢复.CLOB,NCLOB,BLOB都是内部的LOB(Large Object)类型,最长4G,没有LONG只能有⼀列的限制注意: LONG 和 LONG RAW在Oracle新版已不推荐使⽤(使⽤BLOB替代),只是为了向后兼容⽽保留着。
本⽂着重介绍:RAW/CLOB/BLOB1、RAW类型1.1 介绍You use the RAW datatype to store binary data or byte strings. For example, a RAWvariable might store a sequence of graphics characters or a digitized picture. Raw datais like VARCHAR2 data, except that PL/SQL does not interpret raw data. Likewise,Oracle Net does no character set conversions when you transmit raw data from onesystem to another.The RAW datatype takes a required parameter that lets you specify a maximum size upto 32767 bytes. The syntax follows:RAW(maximum_size)You cannot use a symbolic constant or variable to specify the maximum size; you mustuse an integer literal in the range 1 .. 32767.You cannot insert RAW values longer than 2000 bytes into a RAW column. You can insertany RAW value into a LONG RAW database column because the maximum width of aLONG RAW column is 2147483648 bytes or two gigabytes. However, you cannot retrievea value longer than 32767 bytes from a LONG RAW column into a RAW variable. Notethat the LONG RAW datatype is supported only for backward compatibility; see “LONGand LONG RAW Datatypes” on page 3-5 for more information.RAW英语的意思为:⽣的;未加⼯的;你可以使⽤RAW类型存储⼆进制数据或字节符。
Oracle数据类型

oracle数据类型以下的大多数类型的描述都经本人验证,但不免有错误,请不吝赐教(oracle: 10.2.0.3.0 ,plsql: 7.1.5.1398 )注:以下两个函数有助于理解数据类型length() 当前列存储值的字符长度;vsize() 当前列存储值所占用字节数。
1.CHAR固定长度字符域, 最大长度可达2000 个字符或者字节。
默认指定为以字符形式进行存储,并且当位数不够时oracle 在其右边添加空格来补满。
例如:2.VARCHAR2可变长度字符域,最大长度可达4000 个字符。
例如:CREATE TABLE test(name varchar2(20))2.1.CHAR和VARCHAR2区别1.CHAR 的长度是固定的,而VARCHAR2 的长度是可以变化的,比如,存储字符串,对于CHAR (20),表示你存储的字符将占20 个字节(包括17 个空字符),而同样的VARCHAR2 (20)则只占用3 个字节的长度,20 只是最大值,当你存储的字符小于20 时,按实际长度存储。
2 .CHAR 的效率比VARCHAR2 的效率稍高。
3.目前VARCHAR 是VARCHAR2 的同义词。
工业标准的VARCHAR 类型可以存储空字符串,但是Oracle 不这样做,尽管它保留以后这样做的权利。
Oracle 自己开辟了一个数据类型VARCHAR2,这个类型不是一个标准的VARCHAR,它将在数据库中varchar 列可以存储空字符串的特性改为存储NULL 值。
假如你想有向后兼容的能力,Oracle 建议使用VARCHAR2 而不是VARCHAR。
何时该用CHAR,何时该用varchar2?CHAR 与VARCHAR2 是一对矛盾的统一体,两者是互补的关系. VARCHAR2 比CHAR 节省空间,在效率上比CHAR 会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’ 。
oracle 二进制写法

在Oracle数据库中,可以使用二进制数据类型来存储二进制数据。
以下是Oracle中二进制数据的几种常见表示方法:1. RAW数据类型: `RAW` 是一种二进制数据类型,用于存储任意长度的二进制数据。
创建表时,可以这样定义一个`RAW` 列:sql`CREATE TABLE binary_data_table (id NUMBER,binary_data RAW(2000));`2. 使用HEX函数:可以使用`TO_RAW` 函数将十六进制字符串转换为`RAW` 数据类型。
例如:sql`SELECT TO_RAW('4D5A', 'HEX') FROM dual;`3. 使用RAWTOHEX函数和RAW:可以使用`RAWTOHEX` 函数将`RAW` 数据转换为十六进制字符串。
例如:sql`SELECT RAWTOHEX(TO_RAW('Hello World')) FROM dual;`4. BLOB数据类型:`BLOB` 是用于存储大型二进制对象的数据类型。
与`RAW` 类似,但可以存储更大的数据。
5. 使用PL/SQL处理二进制数据:Oracle提供了很多用于处理二进制数据的PL/SQL函数,例如`UTL_I18N.STRING_TO_RAW` 和`UTL_I18N.RAW_TO_CHAR`。
6. 在INSERT语句中直接插入二进制数据:可以直接在INSERT语句中插入二进制数据。
例如:sql`INSERT INTO binary_data_table (id, binary_data) VALUES (1, UTL_I18N.STRING_TO_RAW('Hello World', 'AL32UTF8'));`7. 使用DBMS_LOB包:对于BLOB和CLOB数据类型,可以使用DBMS_LOB包中的函数来处理二进制数据。
使用java读取oracleblob字段实现上传下载

使用JAVA读取ORACLE BLOB字段实现上传下载大对象类型BLOB全称为Binary Large Objects,即二进制大对象。
可以把BLOB区别为三种形式:声像数据、二进制数据和大文本数据。
因此,最常见的应用就是存储图形、声音等对象,此外大二进制对象、OLE对象也可以通过BLOB类型存入数据库,如果文本对象过大,超出了文本类型的规定长度,则必须用BLOB字段进行存储。
我们在经常使用的编程环境中并不能直接支持BLOB字段,因此需要调用相应的函数完成BLOB的使用。
二实际Struts项目的处理流程1 插入BLOB字段的流程表示层:上传使用struts的<html:file property="drawingFile"/>标签,提交给指定处理的Action,在ActionForm中使用struts自带的FormFile来保存文件。
核心代码:<html:form action="/DrawingInputMultiAction" enctype="multipart/form-data"><html:file property="drawingFile"/>....省略</html:form>控制层:在Action中将传入的ActionForm中的文件字段赋给VO值对象,并调用业务代理类的上传方法。
核心代码:.省略其他set方法.省略}Facade门面:通过业务代理类调用DAO中的上传方法,对客户端完全透明。
public int insertDrawing(DrawingVO drawingVO) throws ComtopModuleException {try {DrawingDAO drawingDAO = new DrawingDAO();return (drawingVO);} catch(DrawingException ex) {throw new ComtopModuleException("", ex);}}持久层:DAO中实现和ORACLE数据库的底层交涉,完成真正的文件上传。
ORACLE数据库中主要字段类型的读写例子(包括:Long、Raw、Blob)

ORACLE数据库中主要字段类型的读写例子(包括:Long、Raw、Blob)这里我用的是ORACLE9I, 建立了表C_EMP1_T,结构如下:create table C_EMP1_T(EMP_ID NUMBER(20) not null, //用户IDEMP_NO VARCHAR2(20), //用户编号EMP_DESC LONG, //用户简历USED_DATE DATE, //注册日期EMP_IC_MAC RAW(50), //用户IC卡的MAC号EMP_ADMIN_FLAG CHAR(1), //管理员标志EMP_PICTURE BLOB //用户图像)其中INSERT/UPDATE/SELECT的代码分别如下(DELETE比较简单就省略了,其中SELECT和UPDATE的条件都是记录的rowid):首先BLOB字段是存图片的,所以有一个过程是把图片传到服务器上:先在aspx上加:<form id="Form1" enctype="multipart/form-data" method="post"runat="server"><input id="IoFile" runat="server" type="file"><FONT face="宋体">下一步→</FONT><asp:Button id="btunload" runat="server" Text="上传"></asp:Button> </form>和代码:private void btunload_Click(object sender, System.EventArgs e){btunload.Enabled = false;//获得文件名称string tempfilename = IoFile.PostedFile.FileName;//注: loFile.PostedFile.FileName 返回的是通过文件对话框选择的文件名,这之中包含了文件的目录信息tempfilename = Path.GetFileName ( tempfilename);if (tempfilename.Substring(tempfilename.Length-4,4) == ".bmp") {//去掉目录信息,返回文件名称//判断上传目录是否存在,不存在就建立string tempDirectory = "D:/WWWROOT/MYWEB/dbtest/Image/";if ( ! Directory.Exists ( tempDirectory ) )Directory.CreateDirectory ( tempDirectory ) ;//上传文件到服务器string tempPath = tempDirectory+tempfilename;//得到上传目录及文件名称IoFile.PostedFile.SaveAs ( tempPath );Label1.Text = "<img src='image/"+tempfilename+"'>";Session["filename"] = tempfilename;}else{Label1.Text = "错误的文件类型";}btunload.Enabled = true;/*' 获得并显示上传文件的属性FileName.Text = lstrFileName' 获得文件名称FileType.Text = loFile.PostedFile.ContentType' 获得文件类型FileLength.Text = cStr ( loFile.PostedFile.ContentLength )' 获得文件长度FileUploadForm.visible = falseAnswerMsg.visible = true' 显示上传文件属性End sub */}INSERT:private void BtInsert_Click(object sender, System.EventArgs e){OracleConnection Ocon = new OracleConnection("user id=cmes;da ta source=mes;password=cmes");Ocon.Open();//OracleCommand Ocom = new OracleCommand("insert into c_emp 1_t (EMP_ID,EMP_NO,EMP_DESC,USED_DATE,EMP_IC_MAC,EMP_ADMIN_FLA G,EMP_PICTURE)values(:emp_id,:emp_no,:emp_desc,:emp_date,:emp_ic_m ac,:flag,:picture)",Ocon);OracleCommand Ocom = new OracleCommand("insert into c_emp1 _t (EMP_ID,EMP_NO,EMP_DESC,USED_DATE,EMP_IC_MAC,EMP_ADMIN_FLA G)values(:emp_id,:emp_no,:emp_desc,:emp_date,:emp_ic_mac,:flag)",Oco n);Ocom.Parameters.Add(new OracleParameter("emp_id",OracleType. Number));Ocom.Parameters.Add(new OracleParameter("emp_no",OracleType. VarChar));Ocom.Parameters.Add(new OracleParameter("emp_desc",OracleTyp e.LongVarChar));Ocom.Parameters.Add(new OracleParameter("emp_date",OracleTyp e.DateTime));Ocom.Parameters.Add(new OracleParameter("flag",OracleType.Cha r));Ocom.Parameters.Add(new OracleParameter("emp_ic_mac",OracleT ype.Raw));//Ocom.Parameters.Add(new OracleParameter("picture",OracleType. Blob));Ocom.Parameters["emp_id"].Value = Convert.ToDecimal(tbempid.T ext);Ocom.Parameters["emp_no"].Value = tbempno.Text;Ocom.Parameters["emp_desc"].Value = tbempdesc.Text;string empdate = tbempdate.Text;// yyyymmddOcom.Parameters["emp_date"].Value = new DateTime(Convert.T oInt32(empdate.Substring(0,4)),Convert.ToInt32(empdate.Substring(4,2)),C onvert.ToInt32(empdate.Substring(6,2)) );if (rb1.Checked)Ocom.Parameters["flag"].Value = '1';if (rb2.Checked)Ocom.Parameters["flag"].Value = '2';if (rb3.Checked)Ocom.Parameters["flag"].Value = '3';Ocom.Parameters["emp_ic_mac"].Value = setraw(tbicmac.Text);Ocom.ExecuteNonQuery();/*由与有字段long和blob一起,所以不能在一个insert语句中进行插入,单独insert是成功的OracleConnection Ocon = new OracleConnection("user id=cmes;da ta source=mes;password=cmes");Ocon.Open();OracleCommand Ocom = new OracleCommand("insert into c_emp1 _t (EMP_ID,EMP_PICTURE)values(:emp_id,:picture)",Ocon);Ocom.Parameters.Add(new OracleParameter("emp_id",OracleType. Number));Ocom.Parameters.Add(new OracleParameter("picture",OracleType.B lob));Ocom.Parameters["emp_id"].Value = Convert.ToDecimal(tbempid.T ext);FileStream reader = new FileStream("D:/WWWROOT/MYWEB/dbtes t/Image/002.bmp",FileMode.Open);//在iis中不用用“\”目录结构应该是“/”byte[] tempimage = new byte[reader.Length];reader.Read(tempimage,0,tempimage.Length);//OracleLob tempLob=OracleLob.Null;//tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);//tempLob.Write(tempimage,0,tempimage.Length);//tempLob.EndBatch();reader.Close();Ocom.Parameters["picture"].Size = tempimage.Length;//tempimage.CopyTo(Ocom.Parameters["picture"].Value,0);Ocom.Parameters["picture"].Value = tempimage;Ocom.ExecuteNonQuery();*/string myfilename = Convert.ToString(Session["filename"]);if (myfilename != ""){Ocom.Parameters.Clear();mandText = "update c_emp1_t SET EMP_PICTURE = : PICTURE WHERE EMP_ID= :EMP_ID ";Ocom.Parameters.Add(new OracleParameter("EMP_ID",OracleTy pe.Number));Ocom.Parameters.Add(new OracleParameter("PICTURE",OracleT ype.Blob));Ocom.Parameters["EMP_ID"].Value = Convert.ToDecimal(tbempi d.Text);FileStream reader = new FileStream("D:/WWWROOT/MYWEB/db test/Image/"+myfilename,FileMode.Open);//在iis中不用用“\”目录结构应该是“/”byte[] tempimage = new byte[reader.Length];reader.Read(tempimage,0,tempimage.Length);reader.Close();Ocom.Parameters["PICTURE"].Size = tempimage.Length;Ocom.Parameters["PICTURE"].Value = tempimage;Ocom.ExecuteNonQuery();Session["filename"] = "";}Ocon.Close();}UPDATE:private void btUpdate_Click(object sender, System.EventArgs e){OracleConnection Ocon = new OracleConnection("user id=cmes;da ta source=mes;password=cmes");Ocon.Open();OracleCommand Ocom = new OracleCommand("UPDATE c_emp1_ t SET EMP_ID= :emp_id,EMP_NO= :emp_no,EMP_DESC= :emp_desc,USED_ DATE= :emp_date,EMP_IC_MAC= :emp_ic_mac,EMP_ADMIN_FLAG= :flag W HERE ROWID = :MYROWID",Ocon);Ocom.Parameters.Add(new OracleParameter("MYROWID",OracleTyp e.RowId));Ocom.Parameters.Add(new OracleParameter("emp_id",OracleType. Number));Ocom.Parameters.Add(new OracleParameter("emp_no",OracleType. VarChar));Ocom.Parameters.Add(new OracleParameter("emp_desc",OracleTyp e.LongVarChar));Ocom.Parameters.Add(new OracleParameter("emp_date",OracleTyp e.DateTime));Ocom.Parameters.Add(new OracleParameter("flag",OracleType.Cha r));Ocom.Parameters.Add(new OracleParameter("emp_ic_mac",OracleT ype.Raw));Ocom.Parameters["MYROWID"].Value = TBROWID.Text;Ocom.Parameters["emp_id"].Value = Convert.ToDecimal(tbempid.T ext);Ocom.Parameters["emp_no"].Value = tbempno.Text;Ocom.Parameters["emp_desc"].Value = tbempdesc.Text;string empdate = tbempdate.Text;// yyyymmddOcom.Parameters["emp_date"].Value = new DateTime(Convert.T oInt32(empdate.Substring(0,4)),Convert.ToInt32(empdate.Substring(4,2)),C onvert.ToInt32(empdate.Substring(6,2)) );if (rb1.Checked)Ocom.Parameters["flag"].Value = '1';if (rb2.Checked)Ocom.Parameters["flag"].Value = '2';if (rb3.Checked)Ocom.Parameters["flag"].Value = '3';Ocom.Parameters["emp_ic_mac"].Value = setraw(tbicmac.Text);Ocom.ExecuteNonQuery();string myfilename = Convert.ToString(Session["filename"]);if (myfilename != ""){Ocom.Parameters.Clear();mandText = "update c_emp1_t SET EMP_PICTURE = : PICTURE WHERE EMP_ID= :EMP_ID ";Ocom.Parameters.Add(new OracleParameter("EMP_ID",OracleTy pe.Number));Ocom.Parameters.Add(new OracleParameter("PICTURE",OracleT ype.Blob));Ocom.Parameters["EMP_ID"].Value = Convert.ToDecimal(tbempi d.Text);FileStream reader = new FileStream("D:/WWWROOT/MYWEB/db test/Image/"+myfilename,FileMode.Open);//在iis中不用用“\”目录结构应该是“/”byte[] tempimage = new byte[reader.Length];reader.Read(tempimage,0,tempimage.Length);reader.Close();Ocom.Parameters["PICTURE"].Size = tempimage.Length;Ocom.Parameters["PICTURE"].Value = tempimage;Ocom.ExecuteNonQuery();Session["filename"] = "";}Ocon.Close();}SELECT(由于图片是直接向客户端输出,所以需要另一个页面来输入图片):private void btselect_Click(object sender, System.EventArgs e){if (TBROWID.Text.Length < 18){TBROWID.Text = "请输入正确的ROWID";return;}OracleConnection Ocon = new OracleConnection("user id=cmes;da ta source=mes;password=cmes");Ocon.Open();OracleCommand Ocom = new OracleCommand("select EMP_ID,EMP _NO,EMP_DESC,USED_DATE,EMP_IC_MAC,EMP_ADMIN_FLAG,EMP_PICTUR E from c_emp1_t where rowid = :emprowid",Ocon);Ocom.Parameters.Add(new OracleParameter("emprowid",OracleTyp e.RowId));Ocom.Parameters["emprowid"].Value = TBROWID.Text;OracleDataReader reader = Ocom.ExecuteReader();while (reader.Read()){if (!(reader.IsDBNull(0)))tbempid.Text = Convert.ToString( reader.GetDecimal(0));if (!(reader.IsDBNull(1)))tbempno.Text = reader.GetString(1);if (!(reader.IsDBNull(2)))tbempdesc.Text = reader.GetString(2);if (!(reader.IsDBNull(3))){DateTime DT = reader.GetDateTime(3);tbempdate.Text = DT.ToString("yyyyMMdd");}if (!(reader.IsDBNull(4))){byte[] temp = new byte[4000];reader.GetBytes(4,0,temp,0,4000);tbicmac.Text = getraw(temp);}elsetbicmac.Text = "";if (!(reader.IsDBNull(5))){/*char tempflag = reader.GetChar(5); //不支持此方法switch (tempflag){case '1':rb1.Checked = true;break;case '2':rb2.Checked = true;break;default :rb3.Checked = true;break;}*/char tempflag = Convert.ToChar(reader.GetValue(5));switch (tempflag){case '1':rb1.Checked = true;break;case '2':rb2.Checked = true;break;default :rb3.Checked = true;break;}}if (!(reader.IsDBNull(6))){Label1.Text = "<img src='webform3.aspx?ROWID="+TBROWI D.Text+"'>";}}reader.Close();Ocon.Close();}webform3.aspx的程序:private void Page_Load(object sender, System.EventArgs e){OracleConnection Ocon = new OracleConnection("user id=cmes;da ta source=mes;password=cmes");Ocon.Open();OracleCommand Ocom = new OracleCommand("select EMP_PICTUR E from c_emp1_t where rowid = :emprowid",Ocon);Ocom.Parameters.Add(new OracleParameter("emprowid",OracleTyp e.RowId));Ocom.Parameters["emprowid"].Value = Request.Params["ROWID"];OracleDataReader reader = Ocom.ExecuteReader();while (reader.Read()){if (!(reader.IsDBNull(0))){OracleLob tempBlob = reader.GetOracleLob(0);byte[] tempbuffer = new byte[tempBlob.Length];//tempBlob.BeginBatch(OracleLobOpenMode.ReadWrite);会有错误ORA-22292: 无法在没有事务处理的情况下以读写模式打开 LOBtempBlob.BeginBatch();tempBlob.Read(tempbuffer,0,tempbuffer.Length);tempBlob.EndBatch();//下面是把具体的文件保存出来BinaryWriter writer = new BinaryWriter(new FileStream("D:/ WWWROOT/MYWEB/dbtest/Image/temp.bmp",FileMode.Create));for(int i=0;i<tempbuffer.Length;i++){writer.Write(tempbuffer[i]);}writer.Close();//下面是直接把图片用流向客户端输出Response.BinaryWrite(tempbuffer);}}reader.Close();Ocon.Close();}这些代码在2000下测试通过的,初次写代码有些凌乱,请大家多多提意见。
oracle byte[]类型sql写法
![oracle byte[]类型sql写法](https://img.taocdn.com/s3/m/41d49ecacd22bcd126fff705cc17552707225ed2.png)
oracle byte[]类型sql写法在Oracle数据库中,处理二进制数据(如byte[]类型)通常使用BLOB(Binary Large Object)数据类型。
以下是如何在SQL查询中使用BLOB数据类型的示例:1、创建包含BLOB字段的表:sqlCREATE TABLE blob_example (id NUMBER PRIMARY KEY,data BLOB);2、插入BLOB数据:你可以使用INSERT INTO语句插入BLOB数据。
为了演示,我们将使用Oracle的UTL_I18N.STRING_TO_RAW函数将字符串转换为RAW类型,然后再将其转换为BLOB。
sqlINSERT INTO blob_example (id, data)VALUES (1, UTL_I18N.STRING_TO_RAW('Hello', 'AL32UTF8'));3、查询BLOB数据:要查询BLOB数据,你可以使用标准的SELECT语句。
但要注意,直接在SQL查询中查看BLOB数据可能不直观。
通常,你会将BLOB数据检索到应用程序中,并在那里进行处理或显示。
sqlSELECT id, DBMS_LOB.GETLENGTH(data) AS blob_length, DBMS_LOB.SUBSTR(data, 10, 1) AS first_bytesFROM blob_example;4、更新BLOB数据:你可以使用UPDATE语句更新BLOB数据。
sqlUPDATE blob_exampleSET data = UTL_I18N.STRING_TO_RAW('World', 'AL32UTF8')WHERE id = 1;5、删除BLOB数据:如果你需要删除包含BLOB数据的行,可以使用DELETE语句。
sqlDELETE FROM blob_example WHERE id = 1;请注意,处理BLOB数据时,通常不建议在SQL查询中直接检查或操作其内容,因为这可能会影响性能。