您好我是Oracle中XML文件处理的新手。我看了一下代码,它将XML从外部文件加载到数据库列中。我有些疑惑。
CREATE OR REPLACE DIRECTORY xml_dir AS 'c:temp';
CREATE TABLE xml_tab (
id NUMBER(10),
filename VARCHAR2(100),
xml XMLTYPE
)
/
ALTER TABLE xml_tab ADD (
CONSTRAINT xml_tab_pk PRIMARY KEY (id)
)
/
CREATE SEQUENCE xml_tab_seq;
CREATE OR REPLACE PROCEDURE load_xml (p_dir IN VARCHAR2,
p_filename IN VARCHAR2) AS
l_bfile BFILE := BFILENAME(p_dir, p_filename);
l_clob CLOB;
BEGIN
DBMS_LOB.createtemporary (l_clob, TRUE);
DBMS_LOB.fileopen(l_bfile, DBMS_LOB.file_readonly);
DBMS_LOB.loadfromfile(l_clob, l_bfile, DBMS_LOB.getlength(l_bfile));
DBMS_LOB.fileclose(l_bfile);
INSERT INTO xml_tab (
id,
filename,
xml
)
VALUES (
xml_tab_seq.NEXTVAL,
p_filename,
XMLTYPE.createXML(l_clob)
);
COMMIT;
DBMS_LOB.freetemporary (l_clob);
END;
/
质疑 -
有必要这样做吗?目的是什么? DBMS_LOB.createtemporary(l_clob,TRUE)
我们可以做XMLTYPE(l_clob)而不是做XMLTYPE.CreateXML(l_clob)吗?这两者有什么区别?
我知道这些是基本问题,但我想了解根本原因。