新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
语法:select * from TABLE表 where\x0d\x0adbms_lob.instr(字段名(clod类型),'查询条件',1,1) 0\x0d\x0a\x0d\x0acreate table products(\x0d\x0aproductid number(10) not null,\x0d\x0aname varchar2(255),\x0d\x0adescription CLOB);\x0d\x0a\x0d\x0a查询语句:\x0d\x0a\x0d\x0aselect t.productid, t.name from products t\x0d\x0a\x0d\x0awhere dbms_lob.instr(t.description, 'aaa', 1, 1) 0;\x0d\x0a\x0d\x0a在Oracle中,可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符。其语法为:\x0d\x0ainstr(sourceString,destString,start,appearPosition).\x0d\x0a其中sourceString代表源字符串;destString代表想聪源字符串中查找的子串;start代表查找的开始位置,该参数可选的,默认为\x0d\x0a1;appearPosition代表想从源字符中查找出第几次出现的destString,该参数也是可选的,默认为1;如果start的值为负数,那\x0d\x0a么代表从右往左进行查找。\x0d\x0a返回值为:查找到的字符串的位置。
创新互联秉承实现全网价值营销的理念,以专业定制企业官网,成都网站制作、网站设计,小程序制作,网页设计制作,手机网站制作,成都营销网站建设帮助传统企业实现“互联网+”转型升级专业定制企业官网,公司注重人才、技术和管理,汇聚了一批优秀的互联网技术人才,对客户都以感恩的心态奉献自己的专业和所长。
在Oracle中,可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符。其语法为:
eg: dbms_lob.instr(字段名(clod类型),'查询条件',1,1)
其中sourceString代表想要查询的字段;
destString代表查询条件;
start代表查找的开始位置,该参数可选的,默认为1;
appearPosition代表想从源字符中查找出第几次出现的destString,该参数也是可选的,默认为1;
如果start的值为负数,那么代表从右往左进行查找。
返回值为:当目标字符串没有在源字符串中找到,返回0;当源字符串或目标字符串为null,则返回null;
其他情况则返回目标字符串在源字符串中的其实位置
在oracle中 有 个大对象(lobs)类型可用 分别是blob clob bfile nclob 下面是对lob数据类型的简单介绍 blob:二进制lob 为二进制数据 最长可达 GB 存贮在数据库中 clob:字符lob 字符数据 最长可以达到 GB 存贮在数据库中 bfile:二进制文件;存贮在数据库之外的只读型二进制数据 最大长度由操作系统限制 nclob 支持对字节字符集合(nultibyte characterset)的一个clob列 对于如何检索和操作这些lob数据一直是oracle数据库开发者经常碰到的问题 下面我将在oracle对lob数据处理的一些方法和技巧 介绍给读者 希望能够对读者以后的开发有所帮助 oracle中可以用多种方法来检索或操作lob数据 通常的处理方法是通过dbms_lob包 其他的方法包括使用api(application programming interfaces)应用程序接口和oci(oracle call interface)oracle调用接口程序 一 在oracle开发环境中我们可以用dbms_lob包来处理! dbms_lob包功能强大 简单应用 既可以用来读取内部的lob对象 也可以用来处理bfile对象 但处理两者之间 还有一点差别 处理内部lob对象(blob clob)时 可以进行读和写 但处理外部lob对象bfile时 只能进行读操作 写的操作可以用pl/sql处理 另外用sql也可以处理lob 但要注意sql仅可以处理整个lob 不能操作lob的数据片 在dbms_lob包中内建了read() append write() erase() copy() getlength() substr()等函数 可以很方便地操作lob对象 这里不做深入讨论 读者可以参看相关的书籍 对于pl/sql 下面介绍一种技巧 用动态的pl/sql语句处理clob对象来传替表名!example 动态PL/SQL 对CLOB字段操作可传递表名table_name 表的唯一标志字段名field_id clob字段名field_name记录号v_id 开始处理字符的位置v_pos 传入的字符串变量v_clob修改CLOB的PL/SQL过程 updateclobcreate or replace procedure updateclob(table_name in varchar field_id in varchar field_name in varchar v_id in number v_pos in number v_clob in varchar )islobloc clob;c_clob varchar ( );amt binary_integer;pos binary_integer;query_str varchar ( );beginpos:=v_pos* + ;amt := length(v_clob);c_clob:=v_clob;query_str := select ||field_name|| from ||table_name|| where ||field_id|| = :id for update ; initialize buffer with data to be inserted or updatedEXECUTE IMMEDIATE query_str INTO lobloc USING v_id; from pos position write varchar into loblocdbms_lob write(lobloc amt pos c_clob);mit;exceptionwhen others thenrollback;end;l /用法说明 在插入或修改以前 先把其它字段插入或修改 CLOB字段设置为空empty_clob() 然后调用以上的过程插入大于 到 个字符 如果需要插入大于 个字符 编一个循环即可解决问题 查询CLOB的PL/SQL函数 getclobcreate or replace function getclob(table_name in varchar field_id in varchar field_name in varchar v_id in number v_pos in number) return varchar islobloc clob;buffer varchar ( );amount number := ;offset number := ;query_str varchar ( );beginquery_str := select ||field_name|| from ||table_name|| where ||field_id|| = :id ; initialize buffer with data to be foundEXECUTE IMMEDIATE query_str INTO lobloc USING v_id;offset:=offset+(v_pos )* ; read varchar from the bufferdbms_lob read(lobloc amount offset buffer);return buffer;exceptionwhen no_data_found thenreturn buffer;end;l 用法说明 用select getclob(table_name field_id field_name v_id v_pos) as partstr from dual;可以从CLOB字段中取 个字符到partstr中 编一个循环可以把partstr组合成dbms_lob getlength(field_name)长度的目标字符串 二 对于在其他不同的开发环境 例如vc vb pb java等环境下对lob的处理 处理方法不尽相同 在这里将简要举几个例子来说明不在oracle开发环境下对lob的处理 (一) 在pb中的处理exampler string ls_path ls_filename ls_jhdhlong ll_num ll_count rtnblob ole_blobll_num=dw_lb getrow()if ll_num then ls_jhdh=dw_lb object ct_njhdh[ll_num]select count(*) into :ll_count from sj_jh_jhfjb where ct_jhdlxbh= and ct_jhdh=:ls_jhdh and ct_jdlxbh=:is_jdlx;if ll_count thenrtn=messagebox( 提示 是否要修改此附件 question! yesno! )if rtn= thenSELECTBLOB ct_jhfjnr INTO le_blob from sj_jh_jhfjb where ct_jhdlxbh= and ct_jhdh=:ls_jhdh and ct_jdlxbh=:is_jdlx;ole_ objectdata =ole_blobIf ole_ activate(offsite!) ThenMessagebox( OLE Activate 不能激活 )Return end Ifend ifelsemessagebox( 提示 没有附件 )end ifend if(二)在vb中的处理在vb中处理大对象 一般可以用OO O(oracle objects for ole)来处理大对象 这里介绍一种不用 处理大对象blob的方法 下面这段程序可以将一个文件(文本文件 doc文件 图象文件等)保存到数据库中 并可以将其从数据库读出需要两个mandbuttoncmd 名称 cmdsave caption 保存cmd 名称 cmdread caption 读取一个cmddialog控件同时需要创建一张表t_demo(字段id 类型 number ;字段text 类型 blob;)exmple Option ExplicitDim rn As ADODB ConnectionPublic Function CreateDataSource(DataSource As String UserID As String Password As String) As BooleanOn Error GoTo DbConErr:Set rn = New ADODB ConnectionWith rn ConnectionString = Provider=OraOledb Oracle ; _ password= Password ; _ User ID = UserID ; _ Data Source= DataSource ; _ Locale Identifier= OpenEnd WithCreateDataSource = TrueExit FunctionDbConErr:CreateDataSource = FalseEnd FunctionPrivate Sub cmdRead_Click()Dim rs As New ADODB Recordsetrs ActiveConnection = rnrs LockType = adLockOptimisticrs CursorLocation = adUseClientrs Source = select * from t_demo rs OpenComDlgDir DialogTitle = 保存文件 ComDlgDir Filter = * * ComDlgDir ShowSaveCall BlobToFile(rs Fields( text ) ComDlgDir filename)Set rs = NothingExit SubSet rs = NothingEnd SubPrivate Sub cmdsave_Click()Dim rs As New ADODB Recordsetrs ActiveConnection = rnrs LockType = adLockOptimisticrs CursorLocation = adUseClientrs Source = select * from t_demo rs Openrs AddNewComDlgDir DialogTitle = 选取文件 ComDlgDir ShowOpenrs Fields( id ) Value = If ComDlgDir filename ThenCall FileToBlob(rs Fields( text ) ComDlgDir filename)rs UpdateEnd IfSet rs = NothingExit SubSet rs = NothingEnd SubPrivate Sub Form_Load()If Not CreateDataSource( sid systemp manager ) ThenMsgBox Connection failure! End IfEnd Subfld As ADODB Field filename As String Optional ChunkSize As Long = )Dim fnum As Integer bytesleft As Long bytes As LongDim tmp() As ByteIf (fld Attributes And adFldLong) = ThenErr Raise field doesn t support the GetChunk method End IfIf Dir$(filename) = Then Err Raise File not found fnum = FreeFileOpen filename For Binary As fnumbytesleft = LOF(fnum)Do While bytesleftbytes = bytesle lishixinzhi/Article/program/Oracle/201311/17733