fil*_*ppo 4 oracle sqlplus dump clob
说你有桌子:
Column_name | data_type
Title | Varchar2
Text | CLOB
Run Code Online (Sandbox Code Playgroud)
有些行:
SomeUnkownMovie | A long time ago in a galaxy far, far away....(long text ahead)
FredMercuryBio | Awesomeness and stuff....(more long text)
Run Code Online (Sandbox Code Playgroud)
有没有办法可以查询,所以输出文件就像
SomeUnkownMovie.txt
FredMercuryBio.txt
Run Code Online (Sandbox Code Playgroud)
(和ofc,里面有各自的文字)
我认为这应该是一个简单的sqlplus脚本..虽然我只是不是那个:(
谢谢!
Luk*_*rms 11
这个pl/sql代码应该在oracle 11g中运行.它将clobs的文本转储到标题为filename 的目录中.
begin
for rec in (select title, text from mytable)
loop DBMS_XSLPROCESSOR.clob2file(rec.text, 'DUMP_SOURCES', rec.title ||'.txt'); end loop;
end;
Run Code Online (Sandbox Code Playgroud)
如果DBMS_XSLPROCESSOR不可用,那么您可以将DBMS_XSLPROCESSOR.clob2file替换为使用UTL_FILE的过程.例如 :
CREATE OR REPLACE PROCEDURE CLOB2FILE (
clob_in IN CLOB,
directory_name IN VARCHAR2,
file_name IN VARCHAR2
)
IS
file_handle UTL_FILE.FILE_TYPE;
clob_part VARCHAR2(1024);
clob_length NUMBER;
offset NUMBER := 1;
BEGIN
clob_length := LENGTH(clob_in);
file_handle := UTL_FILE.FOPEN(directory_name, file_name, 'W');
LOOP
EXIT WHEN offset >= clob_length;
clob_part := DBMS_LOB.SUBSTR (clob_in, 1024, offset);
UTL_FILE.PUT(file_handle, clob_part);
offset := offset + 1024;
END LOOP;
UTL_FILE.FFLUSH(file_handle);
UTL_FILE.FCLOSE(file_handle);
EXCEPTION
WHEN OTHERS THEN
UTL_FILE.FCLOSE(file_handle);
RAISE;
END;
Run Code Online (Sandbox Code Playgroud)
或者用dbms_advisor.create_file替换DBMS_XSLPROCESSOR.clob2file.
您是否尝试在数据库服务器文件系统上生成文件?或者在客户端文件系统上?
如果您尝试在数据库服务器文件系统上生成文件,则有一个示例 将CLOB导出到另一个基于Tim Hall的LOB导出示例的 StackOverflow线程中的文件(此时Tim的网站似乎已关闭).
如果您尝试在客户端文件系统上生成文件,则会涉及更复杂的SQL Plus脚本.您正在考虑执行一些操作,例如查询表并使用数据为每个要生成的文件动态生成一个SQL Plus脚本,然后动态调用这些脚本.你真的在推动SQL*Plus的脚本功能,所以这不是我一般会提倡的架构,但我相信它可以完成.
如果您确实需要在客户端文件系统上生成文件,我通常更喜欢使用SQL Plus之外的其他内容.例如,有一个小型Java类的示例,它可以在AskTom站点上的文件中读取和写入CLOB和BLOB数据.我倾向于编写一个在客户端上运行并导出数据的小型Java实用程序,而不是试图在SQL Plus脚本中放入太多逻辑.
| 归档时间: |
|
| 查看次数: |
31993 次 |
| 最近记录: |