向表中 CLOB 字段 插入及更新它,还有查询(搜了很久,还是没解决

longpei312 2003-11-19 01:54:56
想向表
table1( num integer,
clob_column clob,
blob_column blob)
中插入记录及查询,其中clob_column 中放文件,blob_column 中放图片,实在不知该怎么处理,在csdn上查了很多帖子,还是没有解决,请各位大侠帮忙
我是直接用sql语句操作,存储过程也可以!!!

...全文
207 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
longpei312 2003-11-21
  • 打赏
  • 举报
回复
谢谢大家捧场,今天下午结贴!
beckhambobo 2003-11-20
  • 打赏
  • 举报
回复
在internal这个用户下给scott用户授权如下:
SQL>grant create any directory to scott;
SQL>grant create any library to scott;
在scott这个用户下执行下述语句:

SQL>create table bfile_tab (bfile_column BFILE);
SQL>create table utl_lob_test (blob_column BLOB);
SQL>create or replace directory utllobdir as 'C:\DDS\EXTPROC';
SQL>set serveroutput on

然后执行下面语句就将C:\DDS\EXTPROC目录下的word文件COM.doc存入到utl_lob_test
表中的blob_column字段中了。

declare
a_blob BLOB;
a_bfile BFILE := BFILENAME('UTLLOBDIR','COM.doc'); --用来指向外部操作系统

文件
begin
insert into bfile_tab values (a_bfile)
returning bfile_column into a_bfile;
insert into utl_lob_test values (empty_blob())
returning blob_column into a_blob;
dbms_lob.fileopen(a_bfile);
dbms_lob.loadfromfile(a_blob, a_bfile, dbms_lob.getlength(a_bfile));
dbms_lob.fileclose(a_bfile);
commit;
end;
/
chanet 2003-11-20
  • 打赏
  • 举报
回复
关于oracle中大对象处理的一些方法和实例
http://expert.csdn.net/Expert/topic/2435/2435782.xml?temp=.2626459
oscarjiao 2003-11-20
  • 打赏
  • 举报
回复
关注中!
longpei312 2003-11-20
  • 打赏
  • 举报
回复
马上结贴,但是在clob_column 中放文件还是没有解决
llm06 2003-11-20
  • 打赏
  • 举报
回复
c#没用过
vb,vc++倒是很好处理。不知道有没有兴趣
xwyou 2003-11-19
  • 打赏
  • 举报
回复
create procedure InsertBlob(TableName in varchar2,
FieldList in varchar2,
DataList in varchar2,
BlobFieldName in varchar2,
BlobFieldData in blob)
我想知道 FieldList ,DataList,BlobFieldData 的具体含义
FieldList :字段名列表 如,本例是:ICON_ID
DataList :数据列表 如,本例是:strTemp,也就是:"02"

BlobFieldName :blob类型字段列表:本例是:ICON
BlobFieldData :blob类型数据列表:本例是从调用程序中读取到的一个图片文件的字节流(这一个一定要明白)

以上的数据列表可是以多个,如:FieldList="fdname1,fdname2"
datalist="datavalue1,datavlaue2"
以上所有的最后组成一个plsql语句,也就是:“insert into ....”,再执行就OK啦!





xwyou 2003-11-19
  • 打赏
  • 举报
回复
好人做到底吧:
1.表结构:
create table TAB_EQUIP_ICON
(
ICON_ID CHAR(3) not null,
ICON BLOB
)
2.调用:AddIcon("02");
说明:插入一条记录到表TAB_EQUIP_ICON中,icon_id的值为:02,图片的值为:strImageName这个图片文件

3.这个存储过程用到了动态plsql,其它的参数从命名上应该可以看出来,当然你要对plsql有一定了解:)

4.调用是用C#写的,但是知道了文件流的来源和明白blob就是一个二进制数据其它就是各语言类似的调过程写法啦,主要是存储过程的写法
longpei312 2003-11-19
  • 打赏
  • 举报
回复
谢谢 xwyou ,请给一定的说明好吗?参数有些不懂
xwyou 2003-11-19
  • 打赏
  • 举报
回复
对了,我是用的C#写的调用。还有,调用中的参数strtemp是插入的数据列表(不包含图片数据)
longpei312 2003-11-19
  • 打赏
  • 举报
回复
谢谢jiezhi ,但是有没有插入外部文件的例子!
还想问哪有这方面的文档,给个连接吧!
xwyou 2003-11-19
  • 打赏
  • 举报
回复
1、存储过程:
create or replace procedure InsertBlob(TableName in varchar2, FieldList in varchar2,
DataList in varchar2,BlobFieldName in varchar2,BlobFieldData in blob) is

v_SqlString varchar2(1000);
begin
v_SqlString:='insert into '|| TableName || '('|| FieldList ||','|| BlobFieldName ||')values('
|| DataList ||',:BlobFieldData)';
dbms_output.put_line(v_SqlString);
execute immediate v_SqlString using BlobFieldData;
commit;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
DBMS_OUTPUT.PUT_LINE('sqlcode=' ||SQLCODE);
DBMS_OUTPUT.PUT_LINE('message=' || SQLERRM);
end InsertBlob;


2.调用方法(我在项目中用到的,插入图片,blob类型,clob处理类似)

private void AddIcon(string strTemp)
{
//插图标到设备类型图标库
try
{
System.IO.FileStream fs = new System.IO.FileStream(@strImageName, FileMode.Open,FileAccess.Read);
//创建一个数组用于存放图片字节流
byte[] adImageData = new byte[fs.Length];

//读数据到数组
fs.Read(adImageData,0,System.Convert.ToInt32(fs.Length));
//关闭文件流
fs.Close();
Comm.CommandText="InsertBlob"; //这是存储过程名
Comm.CommandType=CommandType.StoredProcedure;
Comm.Parameters.Add("tablename", Oracle.DataAccess.Client.OracleDbType.Varchar2).Value = "TAB_EQUIP_ICON";
Comm.Parameters.Add("fieldlist", Oracle.DataAccess.Client.OracleDbType.Varchar2).Value = "ICON_ID";
Comm.Parameters.Add("datalist", Oracle.DataAccess.Client.OracleDbType.Varchar2).Value = strTemp;
Comm.Parameters.Add("blobfieldname", Oracle.DataAccess.Client.OracleDbType.Varchar2).Value = "ICON";
Comm.Parameters.Add("blobfielddata", Oracle.DataAccess.Client.OracleDbType.Blob).Value = adImageData;
Comm.ExecuteNonQuery();
Comm.Parameters.Clear();
Comm.CommandType=CommandType.Text;
strImageName= "";
}

catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}

}




jiezhi 2003-11-19
  • 打赏
  • 举报
回复
參考例子:
DECLARE
v_CLOBlocator CLOB;
v_BLOBlocator BLOB;
BEGIN
-- Initializes the clob_col to the specified string, and returns the
-- locator into v_LOBlocator.
INSERT INTO lobdemo (key, clob_col)
VALUES (20, 'abcdefghijklmnopqrstuvwxyz')
RETURNING clob_col INTO v_CLOBlocator;

-- Modifies blob_col for the same row.
UPDATE lobdemo
SET blob_col = HEXTORAW('00FF00FF00FF')
WHERE key = 20;

-- Retrieves the locator for the newly updated value, not the value
-- itself.
SELECT blob_col
INTO v_BLOBlocator
FROM lobdemo
WHERE key = 20;
END;
/

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧