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
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;
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的区别,后者只能以只读方式打开
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 /
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/