如何知道一个longraworacle raw的字段有多大

JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
Thread starter
Start date
Unregistered / Unconfirmed
GUEST, post messages is not allowed!
***如何将大于32K的文件插入LONG RAW字段中,和读出?
我查了好多资料,没有结果啊,请高手现身指教!
用存储过程,或在Delphi中用sql语句都可以实现吗?Oracle 中LONG RAW BLOB CLOB类型介绍
RAW: 未加工类型,可存储二进制数据或字节符&
LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长文本一个表中最多一个LONG列【不建议使用】&
LONG RAW: 可变长二进制数据,最长2G 【不建议使用】&
CLOB: 字符大对象Clob 用来存储单字节的字符数据;大型文本,例如XML数据。&
NCLOB: 用来存储多字节的字符数据&
BLOB: 用于存储二进制大对象数据;例如数码照片;&
BFILE: 存储在文件中的二进制数据,这个文件中的数据只能被只读访。但该文件不包含在内。&
bfile字段实际的文件存储在文件中,字段中存储的是文件定位指针.bfile对来说是只读的,也不参与事务性控制和数据恢复.&
CLOB,NCLOB,BLOB都是内部的LOB(Large Object)类型,最长4G,没有LONG只能有一列的限制
注意: LONG 和 LONG RAW在Oracle新版已不推荐使用(使用BLOB替代),只是为了向后兼容而保留着。
本文着重介绍:RAW/CLOB/BLOB
1、RAW类型&
You use the RAW datatype to store binary data or byte strings. For example, a RAW&
variable might store a sequence of graphics characters or a digitized picture. Raw data&
is 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 one&
system to another.&
The RAW datatype takes a required parameter that lets you specify a maximum size up&
to 32767 bytes. The syntax follows:&
RAW(maximum_size)&
You cannot use a symbolic constant or variable to spec you must&
use an integer literal in the range 1 .. 32767.&
You cannot insert RAW values longer than 2000 bytes into a RAW column. You can insert&
any RAW value into a LONG RAW database column because the maximum width of a&
LONG RAW column is
bytes or two gigabytes. However, you cannot retrieve&
a value longer than 32767 bytes from a LONG RAW column into a RAW variable. Note&
that the LONG RAW datatype is supported only for ba see &LONG&
and LONG RAW Datatypes& on page 3-5 for more information.
RAW英语的意思为:生的;未加工的;&
你可以使用RAW类型存储二进制数据或字节符。例如,一个RAW变量可以存储一系列图形字符或一张数码照片。&
RAW数据就像VARCHAR2数据,除了一点:PL/SQL不会对其进行解释。同样的,当你在传输RAW数据时,Oracle Net不会对其进行字符集转换。
RAW数据类型要求指定一个最大值到32767的参数;
声明格式如下: RAW(maximum_size)&
你不能使用一个符号常量或变量来代替该参数而必须使用1..32767中的任一整数。
你不能往RAW列中插入超过2000字节的字符;&
你可以往long raw列中插入任何raw数据,最大支持2G。然而,反过来则无法一次性取出超过32767字节的raw数据。
此处需要注意,long raw是早起版本的类型;现在已不建议使用;详细见以下内容:
1.2 相关工具&
utl_raw.cast_to_raw&
utl_raw.cast_to_number&
utl_raw.cast_to_varchar2&
RAW保存的为16进制数。当使用HEXTORAW时,会把字符串中数据当作16进制数。&
而使用UTL_RAW.CAST_TO_RAW时,直接把字符串中每个字符的ASCII码存放到RAW类型的字段中。
drop table test_
create table test_raw(msg raw(2000));
SCOTT@orcl& insert into test_raw values('&xml&&name&Dylan&/name&&score&100&/score&&/xml&');
insert into test_raw values('&xml&&name&Dylan&/name&&score&100&/score&&/xml&')
第 1 行出现错误:
ORA-01465: 无效的十六进制数字
--这个地方注意是十六进制
SCOTT@orcl& insert into test_raw values(utl_raw.cast_to_raw('&xml&&name&Dylan&/name&&score&100&/score&&/xml&'));
已创建 1 行。
SCOTT@orcl&
select msg from test_
------------------------------------------------------------------------------
3C786D6C3E3C6E616D653EC2F6E616D653E3CEF73636F72
653E3C2F786D6C3E
SCOTT@orcl& select utl_raw.cast_to_varchar2(msg) from test_
UTL_RAW.CAST_TO_VARCHAR2(MSG)
------------------------------------------------------------------------------
&xml&&name&Dylan&/name&&score&100&/score&&/xml&2、LONG和LONG RAW类型
可以使用LONG类型存储变长字符串。Long类型就像VARCHAR2一样,除了LONG的最大容量为32760;
使用LONG RAW类型存储二进制数据或字节字符串。LONG RAW数据就像LONG数据,除了LONG RAW数据不会被PL/SQL解释。&
LONG RAW的最大容量也为32760.
你可以往LONG列中插入任何LONG数据,最大长度为2G。然而,PL/SQL中的LONG类型变量只能支持到32760。&
这条规则同样适用于LONG RAW类型。
表中的LONG列可以存储文本,字符数组,甚至短文档。可以针对该类型列做UPDATE, INSERT, 和SELECT 操作。&
但是无法再表达式,SQL函数调用或特定的SQL条件语句例如WHERE, GROUP BY和CONNECT BY。
In SQL statements, PL/SQL binds LONG values as VARCHAR2, not as LONG. However,&
if the length of the bound VARCHAR2 exceeds the maximum width of a VARCHAR2&
column (4000 bytes), Oracle converts the bind type to LONG automatically, then issues&
an error message because you cannot pass LONG values to a SQL function
SQL语句中, PL/SQL将LONG类型作为VARCHAR2类型绑定。然而,如果所绑定的VARCHAR2长度超出了4000,ORACLE会自动转换到LONG,&
然后抛出一个错误因为你不能将LONG值传递给SQL函数。
SCOTT@orcl& create table long_test(id number, msg long);
表已创建。
SCOTT@orcl& insert into long_test values(1,'hello world');
已创建 1 行。
SCOTT@orcl&
提交完成。
SCOTT@orcl& select * from long_test where msg='123';
select * from long_test where msg='123'
第 1 行出现错误:
ORA-00997: 非法使用 LONG 数据类型
SCOTT@orcl& /
---------- --------------------------------------------------------------------------------
1 hello world
SCOTT@orcl& select id, trim(msg) from long_test where id = 1;
select id, trim(msg) from long_test where id = 1
第 1 行出现错误:
ORA-00932: 数据类型不一致: 应为 NUMBER, 但却获得 LONG3、CLOB&
可以使用CLOB类型大块的字符数据。每一个CLOB变量存储一个定位器,指向一个大块字符数据。
CLOBs participate fully in transactions, are recoverable, and can be replicated. Changes&
made by package DBMS_LOB can be committed or rolled back. CLOB locators can span&
transactions (for reads only), but they cannot span sessions.
CLOB参与整体事务,可恢复,并且可以重复。&
由DBMS_LOB包改变的数据可以提交和回滚。CLOB定位器可以跨事务,但不能跨会话。
You use the BLOB datatype to store large binary objects in the database, in-line or&
out-of-line. Every BLOB variable stores a locator, which points to a large binary object.&
BLOBs participate fully in transactions, are recoverable, and can be replicated. Changes&
made by package DBMS_LOB can be committed or rolled back. BLOB locators can span&
transactions (for reads only), but they cannot span sessions.
用于存储大二进制对象,BLOB参与整体事务,可恢复,并且可以重复。&
由DBMS_LOB包改变的数据可以提交和回滚。BLOB定位器可以跨事务,但不能跨会话。
drop table blob_
SCOTT@orcl& create table blob_test( id number primary key, content blob not null);
表已创建。
SCOTT@orcl& insert into blob_test values(1,'11');
已创建 1 行。
SCOTT@orcl&
提交完成。
SCOTT@orcl& select * from blob_
SCOTT@orcl& set linesize 2000
SCOTT@orcl& /
ID CONTENT
---------- -----------------------------------
SCOTT@orcl& insert into blob_test values(1,'11&');
insert into blob_test values(1,'11&')
第 1 行出现错误:
ORA-01465: 无效的十六进制数字
SCOTT@orcl& update blob_test set content=to_blob('011') where id=1;
已更新 1 行。
SCOTT@orcl& rollback
回退已完成。
SCOTT@orcl& select * from blob_
ID CONTENT
---------- ---------------------------------------------------------------------
delete from blob_test where id=1;&怎么样读取long raw类型的字段_百度知道
怎么样读取long raw类型的字段
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
电脑类认证行家
电脑类行家
采纳数:78237
获赞数:78924
泉州兴瑞发公司最佳优秀员工。
有关oracle Long raw数据字段读取的问题,请大家帮我看看如何解决 ..._data from fileTableV where file_no='1',其中file_data是Long raw数据类型
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。今天在项目中要向Oracle的LONG RAW形字段插入图片,以配合C/S的设计结构
项目中用Hibernate ORM,找了N久没有找到具体操作方法,终于花了2个多小时找到一个JDBC操作的例子,代码改造后为
import java.io.F
import java.io.FileInputS
import java.io.FileNotFoundE
import java.io.IOE
import java.sql.C
import java.sql.DriverM
import java.sql.PreparedS
import java.sql.SQLE
public class JdbcImgDAO {
//数据库连接方法
public static Connection getConnection(){
url="jdbc:oracle:thin:@192.168.0.100:1521:testdb";
Connection conn =
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=DriverManager.getConnection(url,"user","pwd");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
//插入图片到案例库,id为主键,s为上传图片(路径+图片名)
public static void updateImg(String id, String s){
Connection conn = getConnection();
sql="update table t set t.img=? where id=?";
filename=new
//将文件的长度读出,并转换成Long型
l1=filename.length();
l2=(int)l1;
//以流的格式赋值
FileInputStream
FileInputStream(filename);
PreparedStatement
=conn.prepareStatement(sql);
ps.setBinaryStream(1,fis,l2);
//ps.setBinaryStream(1,fis,fis.available());
ps.setString(2,id);
ps.executeUpdate();
ps.close();
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
显示图片页
&%@ page contentType=" charset=gbk"%&
&%@ page import="java.io.*"%&
&%@ page import="java.sql.*, javax.sql.*"%&
&%@ page import="java.util.*"%&
String id = request.getParameter("id");
String URL="jdbc:oracle:thin:@192.168.0.100:1521:testdb";
String user="user";
String password="pwd";
Connection con = DriverManager.getConnection(URL,user,password);
InputStream in =
ResultSet rs =
OutputStream out = response.getOutputStream();
Statement stmt = con.createStatement();
String sql = "select t.img from table t where id="+
rs = stmt.executeQuery(sql);
while(rs.next()) {
in = rs.getBinaryStream("img");
int len = 0;
byte[] byte = new byte[1024];
//response.setContentType("image/jpeg");
while ((len = in.read(byte)) != -1) {
out.write(byte,0,len);
out.close();
in.close();
}catch(Exception e){
e.printStackTrace();
rs.close();
con.close();
显示信息页面
&img src="img.jsp"&
开发者博客:
浏览: 217119 次
来自: 深圳
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'1.存数据进去的时候要用rawtohex
insert into l_raw values (rawtohex('aaa'));
2.直接to_lob查询报错
select to_lob(dat1) from l_raw
3.可以创建一个临时表,这个字段to_lob就没有问题
CREATE TABLE l_raw2 AS
SELECT TO_LOB(dat1) AS dat1
FROM l_raw
4.再用 utl_raw.cast_to_varchar2 函数就没有问题了(直接在long raw 上面用改函数报错)
select utl_raw.cast_to_varchar2(CONTENT)
rr from l_raw1
oracle中RAW数据类型
近日在研究v$latch视图时,发现一个从未见过的数据类型。v$latch 中ADDR属性的数据类型为RAW(4|8)
同时也发现v$process中的ADDR属性的数据类型也为RAW(4|8)。于...
本人开发的&em&oracle&/em&数据库&em&LongRaw&/em&字段转Blob字段工具,可以指定表名,字段名,条件,开发环境Win7,&em&Oracle&/em& xe,VS2010;需要源码修改的发私信
*版权证明: 只允许上传png/jpeg/jpg/gif格式的图片,且小于3M
*详细原因:
交 &em&oracle&/em& &em&LongRaw&/em& 转 Blob 源码 3积分 立即下载 ...
1、LONG 数据类型中存储的是可变长字符串,最大长度限制是2GB。
2、对于超出一定长度的文本,基本只能用LONG类型来存储,数据字典中很多对象的定义就是用LONG来存储的。
1、LONG ...
oracle &em&LongRaw&/em& 转 Blob 立即下载
上传者: GiserVIP 时间:
综合评分: 3 积分/C币:3
Oracle Linux 6.1 &em&+ Oracle&/em& 11.2.0.1 RAC &em&+ RAW&/em&...
一、读long raw字段byte[] bytes = SourceResultSet.getBytes(&图像数据&) 二、写long raw字段preparedStmt.setBinaryStre...
最近做一个小程序,功能是把一个软件保存在Oracle11数据表中的人员照片批量导出。保存照片的字段的类型为Long Row格式,代码如下:
class ImportPhotos
show.jsp //照片显示页面
项目中用到了long raw 类型字段用于存放报表文件内容,一直相安无事。有一天需要修改设计,增加了一个跟报表组关联,问题来了,读取long raw字段总是提是SQLException“流已关闭”,经...
没有更多推荐了,

我要回帖

更多关于 jdbclongraw 的文章

 

随机推荐