CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  基础和管理

实验:关于LOB(LOB表的建立,存储,DBMS_LOB的一些初步学习)

楼主black_snail(●男人要忍○)2003-04-04 11:48:43 在 Oracle / 基础和管理 提问

我发现相当一部分贴子是有关LOB(large   object)的,我想参照ORACLE8   完全参考手册的例子为大家做一个演示,加深一下印象.  
   
  实验工具:  
    win2000   advanced   server  
    oracle8.1.7  
    ORACLE8   完全参考手册  
    SQL   Navigator   4   (它的QUERY结果可以很方便的检查LOB的值)  
    SQL*Plus   Worksheet   (用力执行命令)  
   
  准备工作:  
  1.create   tablespaces    
          CREATE   TABLESPACE   LOBUSER    
          LOGGING    
          DATAFILE   'E:\ORACLE\ORADATA\ORCL\LOBUSER1.ora'   SIZE   100M   REUSE    
          AUTOEXTEND    
          ON   NEXT     1280K   MAXSIZE     32767M   DEFAULT    
          STORAGE   (   INITIAL   128K   NEXT   128K   MINEXTENTS   1   MAXEXTENTS   4096    
          PCTINCREASE   0   )  
           
          CREATE   TABLESPACE   LOBLOB    
          LOGGING    
          DATAFILE   'E:\ORACLE\ORADATA\ORCL\LOBLOB.ora'   SIZE   50M   REUSE    
          AUTOEXTEND    
          ON   NEXT     1280K   MAXSIZE     32767M   DEFAULT    
          STORAGE   (   INITIAL   128K   NEXT   128K   MINEXTENTS   1   MAXEXTENTS   4096    
          PCTINCREASE   0   )  
   
  2.   Create   user   LOBMAN  
  CREATE   USER   "LOBMAN"     PROFILE   "DEFAULT"   IDENTIFIED   BY   "manager"    
        DEFAULT   TABLESPACE   "LOBUSER"    
        TEMPORARY   TABLESPACE   "TEMP"   ACCOUNT   UNLOCK;  
         
  GRANT   "CONNECT"   TO   "LOBMAN";  
  GRANT   "DBA"   TO   "LOBMAN";  
   
  3.   Create   Oracle   Directory:  
      登陆LOBMAN/MANAGER  
      create   or   replace   directory   proposal_dir   as   'e:\oracle\tmp'  
      这个object并不能在DBA   studio中找到,你需要query    
      all_directories   ,   你会发现它的owner   是SYS.  
   
  4.   Create   LOB   Table  
  create   table   proposal    
  (proposal_id   number(10)   primary   key,  
    recipient_name   varchar2(25),  
    proposal_name   varchar2(25),  
    short_description   varchar2(1000),  
    proposal_text   CLOB,  
    Budget   BLOB,  
    cover_letter   BFILE)  
    storage     (initial   50K   next   50K   pctincrease   0)  
    tablespace   lobuser  
    lob   (proposal_text,Budget)   store   as    
    (tablespace   loblob   storage   (initial   50K   next   50K   pctincrease   0)  
      chunk   16k   pctversion   10   nocache   logging);      
   
  这样一来,CLOB   and   BLOB   Columns   就储存在另一个tablespace中.  
  注意,CLOB和BLOB是储存在数据库中,而BFILE是储存在数据库外(库中  
  仅仅放定位符)  
   
  5.   建立e:\oracle\tmp   目录并存入文件  
   
  操作:  
  1.   初始话(insert)  
  insert   into   PROPOSAL  
  values   (1,'DOT   PHILLIPS','CLEAR   PHILLIPS   FIELD',NULL,'This  
  is   the   text   of   proposal   to   clear   Phillips   field.',EMPTY_BLOB(),NULL);  
  commit;  
   
  insert   into   PROPOSAL  
  values   (2,'BRAD   OHMONT','REBUILD   FENCE',NULL,EMPTY_CLOB(),EMPTY_BLOB(),BFILENAME('PROPOSAL_DIR','genmd.log'));  
  commit;      
  注意目录一定要大写!  
   
  insert   into   PROPOSAL  
  select   3,'SKIP   GATES','CLEAR   GATES   FIELD',NULL,Proposal_text,Budget,cover_letter  
  from   proposal  
  where   proposal   =   1;  
  commit;  
   
  2.   Update  
  select   proposal_text   from   proposal   where   proposal_id   =   3   for   update;  
  update   proposal   set   proposal_text   =   'This   is   the   new   proposal   text   .'  
  where   proposal_id   =   3;  
  commit;  
   
  注意:for   update   是必须的,当update   clob   和blob   时,必须先把记录锁住  
  (对于BFILE则不用)  
   
  3.   DBMS_LOB   Package->Read  
  set   serveroutput   on  
  declare    
        locator_var   clob;  
        amount_var   integer;  
        offset_var   integer;  
        output_var   varchar2(10);  
  begin  
        amount_var:=10;  
        offset_var:=1;  
        select   proposal_text   into   locator_var  
        from   Proposal    
        where   proposal_id   =   1;  
        DBMS_LOB.read(locator_var,amount_var,offset_var,output_var);  
        DBMS_OUTPUT.PUT_LINE('Start   of   proposal   text:   '||output_var);  
  end;  
  /  
   
  4.   DBMS_LOB   Package->write  
  set   serveroutput   on  
  declare    
        locator_var   clob;  
        amount_var   integer;  
        offset_var   integer;  
        buffer_var   varchar2(12);  
  begin  
        amount_var:=12;  
        offset_var:=10;  
        buffer_var   :='ADD   NEW   TEXT';  
        select   proposal_text   into   locator_var  
        from   Proposal    
        where   proposal_id   =   3   for   update;   /*for   update*/  
        DBMS_LOB.WRITE(locator_var,amount_var,offset_var,buffer_var);  
  end;  
  /  
   
  实验完成.DBMS_LOB   package   contains   a   lot   of   sub   routines   which   are    
  very   useful   to   operator   the   LOB   column   .  
  问题点数:0、回复次数:5Top

1 楼black_snail(●男人要忍○)回复于 2003-04-04 12:09:57 得分 0

当你query   user_segments   时,你会发现每个LOB   column   都有自己的SEGMENTS   (LOBSEGMENT,LOBINDEX)Top

2 楼maohaisheng(虫族:无名小虫)回复于 2003-04-05 09:36:59 得分 0

支持版主Top

3 楼qxm(qxm)回复于 2003-04-15 17:15:22 得分 0

good!Top

4 楼beckhambobo(beckham)回复于 2003-04-15 18:58:21 得分 0

比较详细:供大家参考  
  http://download-west.oracle.com/docs/cd/A87860_01/doc/appdev.817/a76940/adl03pr4.htm#146545Top

5 楼Fred_Mark()回复于 2003-05-17 12:39:12 得分 0

支持,收藏Top

相关问题

  • LOB存储问题
  • 谁知道怎样调用Oracle中DBMS_LOB包中的READ函数,是不是用存储过程才行?
  • delphi中如何调用oracle中的存储过程和DBMS包?
  • 有关DBMS_JOB.SUBMIT的问题(也问定时调用存储过程)
  • 调试时写的dbms_output.put_line()对存储过程有影响吗?
  • 在存储过程中用dbms_output.put_line()怎么打印不出结果?
  • 在存储过程里用dbms_lock.sleep(10)编译时提示Error: PLS-00201: 必须说明标识符 'DBMS_LOCK'
  • dbms
  • 做个实验
  • 如何使用dbms_lob?要写Clob型数据的问题

关键词

  • dbms
  • oracle
  • lob
  • proposal
  • lobuser
  • amount
  • tablespace
  • offset
  • clob
  • var

得分解答快速导航

  • 帖主:black_snail

相关链接

  • Oracle类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo