您的位置:首页 > 数据库 > Oracle

如何将xml文件存入oracle 的xmltype类型中

2009-03-26 08:58 501 查看
我们有些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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: