现在需要更改数据库到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();