参考如下方法: DECLARE CURSOR L_V IS SELECT VIEW_NAME, S.TEXT_LENGTH FROM USER_VIEWS S; L_F UTL_FILE.FILE_TYPE; L_NUM INT DEFAULT 0; L_MAXSIZE INT DEFAULT 5000; --每个文件可以存储的记录数 L_FILENO INT DEFAULT 1; BEGIN FOR I IN L_V LOOP IF MOD(L_NUM, L_MAXSIZE) = 0 THEN IF L_FILENO > 0 THEN UTL_FILE.FCLOSE(L_F); END IF; L_F := UTL_FILE.FOPEN('TEST', 'xx' || L_FILENO || '.txt', 'w', 32767); L_FILENO := L_FILENO + 1; END IF; UTL_FILE.PUT_LINE(L_F, I.VIEW_NAME || ',' || I.TEXT_LENGTH); L_NUM := L_NUM + 1; END LOOP; UTL_FILE.FCLOSE(L_F); END; /
不好意思,这几天才把数据导进去 数据量是1亿多条,我就一张表users,一个字段username(主键) 现在要把这些数据导成多个文本文件,按照一楼的意思我写成这样执行: sool d:\d.txt set heading off set feedback off select username from users where rownum<10000; spool off; 将上面的代码在sql plus上执行 后来我发现有几个问题: 第一:select username from users where rownum<10000;与select username from users where rownum<100;这两条语句查出来的前一百条数据根本上就对不上,不是一样的,也就是说到时我循环导出时,修改rownum<10000中值的大小时,这样导出来的数据有可以是重复的; 第二:这个循环怎么写啊,生成不同的文件 5楼的那些语句能不能做个注释啊?看不懂
Oracle数据直接导出到文本文件的方法
http://www.builder.com.cn/2007/1005/536616.shtml
DECLARE
CURSOR L_V IS
SELECT VIEW_NAME, S.TEXT_LENGTH FROM USER_VIEWS S;
L_F UTL_FILE.FILE_TYPE;
L_NUM INT DEFAULT 0;
L_MAXSIZE INT DEFAULT 5000; --每个文件可以存储的记录数
L_FILENO INT DEFAULT 1;
BEGIN FOR I IN L_V LOOP
IF MOD(L_NUM, L_MAXSIZE) = 0 THEN
IF L_FILENO > 0 THEN
UTL_FILE.FCLOSE(L_F);
END IF;
L_F := UTL_FILE.FOPEN('TEST',
'xx' || L_FILENO || '.txt',
'w',
32767);
L_FILENO := L_FILENO + 1;
END IF;
UTL_FILE.PUT_LINE(L_F, I.VIEW_NAME || ',' || I.TEXT_LENGTH);
L_NUM := L_NUM + 1;
END LOOP;
UTL_FILE.FCLOSE(L_F);
END;
/
不好意思,这几天才把数据导进去
数据量是1亿多条,我就一张表users,一个字段username(主键)
现在要把这些数据导成多个文本文件,按照一楼的意思我写成这样执行:
sool d:\d.txt
set heading off
set feedback off
select username from users where rownum<10000;
spool off;
将上面的代码在sql plus上执行
后来我发现有几个问题:
第一:select username from users where rownum<10000;与select username from users where rownum<100;这两条语句查出来的前一百条数据根本上就对不上,不是一样的,也就是说到时我循环导出时,修改rownum<10000中值的大小时,这样导出来的数据有可以是重复的;
第二:这个循环怎么写啊,生成不同的文件
5楼的那些语句能不能做个注释啊?看不懂