dbms_lob_open_filecloseall_loadclobfromfile(一)

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博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-665888/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9240380/viewspace-665888/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值