ITPub博客

首页 > Linux操作系统 > Linux操作系统 > dbms_lob_open_filecloseall_loadclobfromfile(一)

dbms_lob_open_filecloseall_loadclobfromfile(一)

原创 Linux操作系统 作者:wisdomone1 时间:2010-06-22 16:49:55 0 删除 编辑
SQL> DECLARE
  2  V_LOB CLOB;
  3  V_FILE BFILE := BFILENAME('DIR_TNS', 'tnsnames.ora');
  4  V_SOURCE NUMBER := 1;
  5  V_DEST NUMBER := 1;
  6  V_LANG NUMBER := 0;
  7  V_WARN NUMBER;
  8  BEGIN
  9  UPDATE t_clob SET a = EMPTY_CLOB RETURN a INTO V_LOB;
 10  DBMS_LOB.FILEOPEN(V_FILE);
 11  DBMS_LOB.OPEN(V_LOB, DBMS_LOB.LOB_READWRITE);
 12  DBMS_LOB.LOADCLOBFROMFILE(V_LOB,
 13  V_FILE,
 14  DBMS_LOB.LOBMAXSIZE,
 15  V_DEST,
 16  V_SOURCE,
 17  0,
 18  V_LANG,
 19  V_WARN);
 20  DBMS_LOB.CLOSE(V_LOB);
 21  DBMS_LOB.FILECLOSEALL;
 22  COMMIT;
 23  END;
 24  /
DECLARE
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: invalid LOB locator specified:  #我也没太明白,我通过下列方法处理,添加一个列,并给clob列添加null值.因为plsql用的是update
ORA-22275
ORA-06512: at "SYS.DBMS_LOB", line 710
ORA-06512: at line 11

SQL> alter table t_clob add b int;
Table altered.
SQL> insert into t_clob values(null,1);
1 row created.
SQL> commit;
Commit complete.
 
#根据官方手册中此存储过程的参数或变量的顺序来定义plsql,请注意参数的数据类型及默认值
  dbms_lob.loadclobfromfile存储过程(就是把操作系统的文件加载存储到oracle的clob列中)有十个参数,晕,这么多;对于没有开发功力的我,晕哟
SQL> DECLARE
  2  V_LOB CLOB;#参数1
  3  V_FILE BFILE := BFILENAME('DIR_TNS', 'tnsnames.ora');#参数2
  4  V_SOURCE NUMBER := 1;#参数3,下面同理
  5  V_DEST NUMBER := 1;#注意查看官方手册这些参数的默认值 ,有些鬼参数我不理解
  6  V_LANG NUMBER := 0;
  7  V_WARN NUMBER;
#定义了一堆参数,下面开始plsql的处理begin end
  8  BEGIN
  9  UPDATE t_clob SET a = EMPTY_CLOB RETURN a INTO V_LOB; #对update t set col=empty_clob return col into v_lob还不知道,太丢人了,说起来plsql我也是狗屁不懂
 10  DBMS_LOB.FILEOPEN(V_FILE);#打开bfile,切记用fileopen
 11  DBMS_LOB.OPEN(V_LOB, DBMS_LOB.LOB_READWRITE);#用dbms_lob.open以读写方式(还有只读方式),注意dbms_lob.open与dbms_lob.fileopen的区别,后者只能以只读方式打开
 
12  DBMS_LOB.LOADCLOBFROMFILE(V_LOB,   #十个参数,太多,我换行处理了,在编写这些plsql(多长参数的oracle 存储过程),切记一一与手册对应参数顺序与数据类型
 13  V_FILE,
 14  DBMS_LOB.LOBMAXSIZE,
 15  V_DEST,
 16  V_SOURCE,
 17  0,
 18  V_LANG,
 19  V_WARN);
 20  DBMS_LOB.CLOSE(V_LOB);#把bfile存储在oracle clob列中,可以关闭dbms_lob.close bfile了
 21  DBMS_LOB.FILECLOSEALL;#dbms_lob.filecloseall是关闭本会话中所有打开的bfile
 22  COMMIT;
 23  END;
 24  /
PL/SQL procedure successfully completed.
 

#下列显示bfile数据类型的文件长度,其实就是查看tnsnames.ora的文件长度
declare
  2  v_file bfile:=bfilename('DIR_TNS','tnsnames.ora');#声明一个bfile数据类型,参数分别为存储bfile真实文件的目录(你要确立这个目标存在及可读写),bfile操作的文件
  3  v_length int;#定义这个变量接收长bfile类型文件的长度
  4  begin
  5  dbms_lob.fileopen(v_file);#dbms_lob.fileopen打开bfile(以只读方式)
  6  dbms_output.put_line('haha'||dbms_lob.getlength(v_file));#通过一个dbms_lob.getlength函数得到bfile和长度,参数为bfile定义变量
  7  dbms_lob.fileclose(v_file);#上面你开启了v_file,当然也要对应关闭它了,其实就是关闭bfile的文件
  8* end;
haha1952  #这是处理结果,1952个字符哟

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9240380/viewspace-665888/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
提供针对oracle初学者及进阶的数据库培训,欢迎大家咨询: 微信: wisdomone 微信公众号: lovedb 工作经历: 中国普天 北京科蓝 北京云和恩墨 北京神州新桥

注册时间:2008-04-04

  • 博文量
    2189
  • 访问量
    12690169