以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XML 与 数据库 』  (http://bbs.xml.org.cn/list.asp?boardid=17)
----  如何将xml文件存入oracle  的xmltype类型中?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=17&rootid=&id=52800)


--  作者:sunmcc
--  发布时间:9/18/2007 11:20:00 AM

--  如何将xml文件存入oracle  的xmltype类型中?
我们有些xml数据,以前用SQL server2005的xml 类型,
现在需要更改数据库到oracle 10g上,
以前使用SQL server2005时用的是这样的SQL语句:
insert into invoicexml_col(inv_id,inv_doc)
SELECT inv_doc,1 FROM  (SELECT * FROM OPENROWSET ( BULK 'c:\test.xml',SINGLE_BLOB)
AS inv_doc )AS R(inv_doc) ;
这个代码可以将'c:\test.xml'目录下的xml文件存入类型为xml的inv_doc字段中,现在在用oracle 10g,在PL/SQL下测过下面的代码:
CREATE TABLE resumes2 (
employee_id NUMBER(6) PRIMARY KEY,
resume XMLType)
XMLType COLUMN resume
STORE AS CLOB;

CREATE DIRECTORY XMLDIR AS 'C:\';
GRANT READ ON DIRECTORY XMLDIR TO PUBLIC;

Insert into resumes2 values (1,
  XMLType(bfilename('XMLDIR','test.xml'),nls_charset_id('AL16UTF8')));
  我发现这种方法里XMLDIR路径指向的是服务器目录,而我希望这个目录是客户端的目录,我该怎样修改呢??
  我是不是需要把xml文件先存入clob,然后再insert呢?在.net中应该怎么来做,是不是需要安装Oracle Data Provider for .Net??我下载了一个,一安装界面就不动了,晕呢,知道的朋友能解答一下吗,万分感谢!!


--  作者:sunmcc
--  发布时间:9/26/2007 4:54:00 PM

--  
不知道是坛子里的高手都不屑于回答这么弱智的问题还是都没人关注oracle xmltype.自己搞定了,贴出来给象我一样盲目的朋友.
以前我的客户端是9i,所以装了10g的odp.net,发现冲突,捣腾了很久才卸掉,重装了9i,发现PL/SQL里edit data总是很慢,根本出不来xmltype的数据行,后来才知道是版本问题,
装了10g的客户端就好了,而且odp.net也有了。
using Oracle.DataAccess.Types;
using Oracle.DataAccess.Client;

第一步:将xml文件读成string型:
StreamReader sr = new StreamReader("E:\\my.net\\oracleXmlTest\\mcc.xml");
  string outstring = "";
                // Read and display lines from the file until the end of
                // the file is reached.
             while ((line = sr.ReadLine()) != null)
             {
                 outstring += line;
             }
或者直接:
  XmlDocument xDocument = new XmlDocument();
  xDocument.Load("E:\\my.net\\oracleXmlTest\\mcc.xml");
第二步:定义OracleXmlType
     // OracleXmlType cxml = new OracleXmlType(conn, outstring);
       OracleXmlType cxml = new OracleXmlType(conn, xDocument);
第三步:
OracleConnection conn = new OracleConnection("Data Source=GISORA;User

Id=meng;Password=meng");
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "INSERT INTO resumes4 VALUES (15,:pb)";
cmd.Parameters.Add("pb", OracleDbType.XmlType, iSize).Value = cxml;
cmd.ExecuteNonQuery();            
conn.Close();
代码很简单,过程很艰难!

[此贴子已经被作者于2007-9-26 19:07:22编辑过]

--  作者:wind_gemini
--  发布时间:10/8/2007 3:35:00 PM

--  
作个标记先~
--  作者:susie8449
--  发布时间:7/10/2008 8:48:00 PM

--  
现在剛接觸xml。學習中....
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
125.000ms