这是我正在尝试运行的PL/SQL过程。我面临的问题是一个无效的目录路径。我正在windows服务器上运行Oracle 11g。我在另一台机器上配置了一个客户机,这是一台linux机器,我尝试在init.ora文件中签入以设置目录路径,但是在11g Windows版本中似乎不支持futil包。
如何从表中导入单个列,其中XML_clob(XML存储在一堆中),列类型在本例中是CLOB,然后转储到文件中。了解是否有更好的PL/SQL过程可用于将整个列转换为单个文件并通过客户端计算机存储在目录中
感谢你对我的问题的指导
更新
CREATE or REPLACE PROCEDURE
process_all_rows
IS
TYPE clob_aat
IS TABLE OF minf100k300wclob%xml_clob
INDEX BY PLS_INTEGER;
l_XML clob_aat;
BEGIN
select XMLElement(xml_clob).getClobVal()
BULK COLLECT INTO l_XML
FROM minf100k300wclob;
FOR indx IN 1 .. L_XML.COUNT
LOOP
dbms_lob.append(L_XML, 'XML_EDI_FILES_1', 'file1.xml', nls_charset_id('AL32UTF8'));
END LOOP;
END process_all_rows;我无法使它工作,因为我得到了如下所示的错误
过程PROCESS_ALL_ROWS的错误:
LINE/COL ERROR
-------- -----------------------------------------------------------------
4/4 PL/SQL: Item ignored
5/33 PLS-00208: identifier 'XML_CLOB' is not a legal cursor attribute
12/22 PLS-00382: expression is of wrong type
18/7 PL/SQL: Statement ignored
18/7 PLS-00306: wrong number or types of arguments in call to 'APPEND'
SQL>
enter code here发布于 2015-12-17 13:55:45
1)要使用clob2file或大多数依赖于UTL_FILE的函数,您必须首先在oracle数据库中创建一个directory object。语法是:
CREATE DIRECTORY XML_EDI_FILES AS 'C:\path\on\your\server\';这会将服务器上指定的目录添加到具有指定名称的特殊oracle表中,在这种情况下是XML_EDI_FILES。稍后调用与文件相关的过程时,将该名称作为参数传递。有关更多信息,请参见文档。当然,服务器上的oracle进程必须具有对该dir的写权限。
2)等一下,通过客户端机?例如,使用sqlplus假脱机。粗语法是
set long 4000;
spool output_file.txt
select xml_clob from minf100k300wc虽然我几乎可以保证这在一开始不会像预期的那样工作,因为sql-plus也倾向于输出列名、插入换行等。您必须查找sqlplus格式选项。我可能会使用一些Java代码来代替,Clobs很好地映射到字符串IIRC。
3)不清楚你在问什么。
对最新问题的答复:
...but,我甚至在我的评论中描述了你必须做的事情。给你:
CREATE or REPLACE PROCEDURE process_all_rows IS
tmp_clob clob;
cursor cur_clob is
select XMLElement(xml_clob).getClobVal() val FROM minf100k300wclob;
begin
dbms_lob.createtemporary(tmp_clob,true);
for c in cur_clob loop
dbms_lob.append(tmp_clob, c.val);
end loop;
dbms_xslprocessor.clob2file(tmp_clob, 'XML_EDI_FILES_1', 'file1.xml', nls_charset_id('AL32UTF8'));
dbms_lob.freetemporary(tmp_clob);
end;https://stackoverflow.com/questions/34330234
复制相似问题