如何将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??我下载了一个,一安装界面就不动了,晕呢,知道的朋友能解答一下吗,万分感谢!!

 

 

以前我的客户端是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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值