C++完畢Oracle存儲過程批量插入(二)
阿新 • • 發佈:2017-06-10
con 地址 tco ref path ava nload 能夠 table
2)C++代碼的調用
上篇文章簡單的介紹了一下oracle參數是Object類型的數據庫存儲過程,以及JAVA使用JDBC去調用該類的存儲過程的方法。
可是我須要的是C++下的方案。使用Poco庫未發現不論什麽能夠調用該類型存儲過程的方法,可是功能還是須要實現的,後來發現Oracle支持XML的解析,於是有了以下的方案。即存儲過程的參數為CLOB類型,C++依照傳入XML格式字符串的方式調用存儲過程,在存儲過程中解析xml後。將數據插入數據庫中。
(有了上述的方案後,我猜想JDBC的處理方式可能也是往Oracle數據庫中傳入XML格式的字符串,Oracle內部能夠實現XML到Object對象的轉換,最後往存儲過程中傳入該Object參數)
以下為該方案的主要代碼:
1)Oracle存儲過程
create or replace procedure POCO_TEST_XML_CLOB_PRO(v_xml in CLOB) is begin INSERT INTO POCO_TEST(ID,name,code) SELECT * FROM XMLTABLE(‘$B/Parment/PocoTest‘ PASSING XMLTYPE(v_xml) AS B COLUMNS ID VARCHAR2(50) PATH ‘/PocoTest/ID‘, NAME VARCHAR2(50) PATH ‘/PocoTest/Name‘, CODE VARCHAR2(50) PATH ‘/PocoTest/Code‘); end POCO_TEST_XML_CLOB_PRO;
2)C++代碼的調用
std::string str; ODBCObject::getCollectionXmlStr(str,arr); Poco::Data::CLOB clob(str.c_str(),str.size()); session << "{call POCO_TEST_XML_CLOB_PRO(?)}", Poco::Data::Keywords::in(clob), Poco::Data::Keywords::now;
C++完畢Oracle存儲過程批量插入(二)