免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1742 | 回复: 2
打印 上一主题 下一主题

Oracle数据库如何正确用PL/SQL? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-10-28 23:29 |只看该作者 |倒序浏览
Oracle数据库如何正确用PL/SQL从相关数据库中来准确的读取BLOB字段的实际操作,其中包括如何正确的确认相关对象存在,以及如何创建存储Directory等相关内容介绍。

1.确认对象存在
    SQL> col fdesc for a30  
  • SQL> select fid,fname,fdesc from eygle_blob;  
  • FID FNAME FDESC  

1 ShaoLin.jpg 少林寺-易经经
2 DaoYing.jpg 倒映
2.创建存储Directory
    SQL> connect / as sysdba  
  • Connected.  SQL> create or replace directory BLOBDIR as 'D:\oradata\Pic';  
  • Directory created.  SQL>
  • SQL> grant read,write on directory BLOBDIR to eygle;  Grant succeeded.  
  • SQL>


3.Oracle数据库用PL/SQL从数据库中读取BLOB字段的过程中我们需要创建存储过程
    SQL> connect eygle/eygle  
  • Connected.  SQL>
  • SQL> CREATE OR REPLACE PROCEDURE eygle_dump_blob (piname varchar2,poname varchar2) IS  l_file UTL_FILE.FILE_TYPE;  
  • l_buffer RAW(32767);  l_amount BINARY_INTEGER := 32767;  
  • l_pos INTEGER := 1;  l_blob BLOB;  
  • l_blob_len INTEGER;  BEGIN  
  • SELECT FPIC  INTO l_blob  
  • FROM eygle_blob  WHERE FNAME = piname;  
  • l_blob_len := DBMS_LOB.GETLENGTH(l_blob);  l_file := UTL_FILE.FOPEN('BLOBDIR',poname,'wb', 32767);  
  • WHILE l_pos <
    l_blob_len LOOP  DBMS_LOB.READ (l_blob, l_amount, l_pos, l_buffer);  
  • UTL_FILE.PUT_RAW(l_file, l_buffer, TRUE);  l_pos := l_pos + l_amount;  
  • END LOOP;  UTL_FILE.FCLOSE(l_file);  
  • EXCEPTION  WHEN OTHERS THEN  
  • IF UTL_FILE.IS_OPEN(l_file) THEN  UTL_FILE.FCLOSE(l_file);  
  • END IF;  RAISE;  
  • 31 END;  32 /  
  • Procedure created.  


4.取出字段数据
    SQL> host ls -l d:\oradata\Pic  
  • total 7618  -rwxrwxrwa 1 gqgai None 2131553 Apr 19 10:12 DaoYing.jpg  
  • -rwxrwxrwa 1 gqgai None 1768198 Apr 19 10:12 ShaoLin.jpg  SQL> exec eygle_dump_blob('ShaoLin.jpg','01.jpg')  
  • PL/SQL procedure successfully completed.  SQL> host ls -l d:\oradata\Pic  
  • total 11072  -rwxrwxrwa 1 Administrators SYSTEM 1768198 Apr 26 07:16 01.jpg  
  • -rwxrwxrwa 1 gqgai None 2131553 Apr 19 10:12 DaoYing.jpg  -rwxrwxrwa 1 gqgai None 1768198 Apr 19 10:12 ShaoLin.jpg  
  • SQL>
    SQL> exec eygle_dump_blob('DaoYing.jpg','02.jpg')  
  • PL/SQL procedure successfully completed.  SQL> host ls -l d:\oradata\Pic  
  • total 15236  -rwxrwxrwa 1 Administrators SYSTEM 1768198 Apr 26 07:16 01.jpg  
  • -rwxrwxrwa 1 Administrators SYSTEM 2131553 Apr 26 07:19 02.jpg  -rwxrwxrwa 1 gqgai None 2131553 Apr 19 10:12 DaoYing.jpg  
  • -rwxrwxrwa 1 gqgai None 1768198 Apr 19 10:12 ShaoLin.jpg  

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2010-10-29 12:19 |只看该作者
学习了。不错。

论坛徽章:
3
CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43
3 [报告]
发表于 2010-10-29 14:26 |只看该作者
有意思
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP