C++完成Oracle存储过程批量插入(二)

上篇文章简单的介绍了一下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;

这里是完整工程代码的下载地址。

时间: 2024-10-20 23:48:45

C++完成Oracle存储过程批量插入(二)的相关文章

C++完毕Oracle存储过程批量插入(二)

上篇文章简单的介绍了一下oracle參数是Object类型的数据库存储过程,以及JAVA使用JDBC去调用该类的存储过程的方法. 可是我须要的是C++下的方案.使用Poco库未发现不论什么能够调用该类型存储过程的方法,可是功能还是须要实现的,后来发现Oracle支持XML的解析,于是有了以下的方案.即存储过程的參数为CLOB类型,C++依照传入XML格式字符串的方式调用存储过程,在存储过程中解析xml后.将数据插入数据库中. (有了上述的方案后,我猜想JDBC的处理方式可能也是往Oracle数据

C++完成Oracle存储过程批量插入(一)

为了满足大数据量的批量插入这个需求,最近研究了一下Oracle数据库的批量插入这块儿,本篇先介绍一下这两天来所了解到的以及一次不成功的C++进行存储过程批量插入方案. 一.Oracle处理批量插入存储过程 1.Oracle处理批量插入涉及到的相关概念有:Type.bulk collect.Oracle数组等.现在对它们依次简单的介绍一下. 1)Type Type主要用于用户建立Oracle自定义类型. Type常用的自定义类型介绍: A.子类型 类似与全局定义的常量,只要改一处地方,与此常量相关

Oracle 存储过程 批量插入测试数据

有时候需要做DB的效率测试时,需要模拟大量数据.可以根据一条原始数据,通过执行存储过程拷贝出大量数据: CREATE OR REPLACE PROCEDURE proc_msw_strsql IS i INT; BEGIN i :=1; WHILE i<=100000 LOOP INSERT INTO REP_DATAF_07_0 (SELECT REP_DATAF_07_ITEMID_SEQ.nextval AS PKID, ORGAN_ID, REPORT_ID, ITEM_ID, REPO

postgres 使用存储过程批量插入数据

参考资料(pl/pgsql 官方文档): http://www.postgresql.org/docs/9.3/static/plpgsql.html create or replace function creatData2() returns boolean AS $BODY$ declare ii integer; begin II:=1; FOR ii IN 1..10000000 LOOP INSERT INTO ipm_model_history_data (res_model, r

Mybatis 针对oracle的批量插入

xml文件参数对象: 1 public class Columns{ 2 private String basedate_code; 3 private String tableName; 4 private String codeDescribeindex; 5 private String codeInfoindex; 6 private String codePymindex; 7 private List<Info> infos; Dao层方法: public void bulkIns

sqlserver存储过程批量插入数据

在系统中经常会遇到向数据库中批量插入数据情况,存储过程中没有数组,只有通过字符串分割循环插入,下面是一个本人研究的一个例子: create proc [dbo].[Proc_TestBatchMainDetailIns] @mainName nvarchar(50),@detailNameStr nvarchar(max),@detailAgeStr nvarchar(max), @detailRowCount int=1,@tmpFlag int=1,@newMainId int=0 as b

解决Oracle+Mybatis批量插入报错:SQL 命令未正确结束

Mybatis批量插入需要foreach元素.foreach元素有以下主要属性: (1)item:集合中每一个元素进行迭代时的别名. (2)index:指定一个名字,用于表示在迭代过程中,每次迭代到的位置. (3)collection:根据传入的参数值确定. (4)open:表示该语句以什么开始. (5)separator:表示在每次进行迭代之间以什么符号作为分隔 符. (6)close:表示以什么结束. 首先,错误的xml配置文件如下: <insert id="save" da

oracle mybatis 批量插入遇到的问题

1.这是一个很蛋疼的问题,用<insert>的话会一直报sql语法错误,我这里改用<update>测试OK,用<select>貌似也行 2.批量插入带oracle序列递增遇到的错误:java.sql.SQLSyntaxErrorException: ORA-02287: 此处不允许序号 查资料说有很多限制 Restrictions on Sequence Values You cannot use CURRVAL and NEXTVAL in thefollowing

Mysql慢查询开启和查看 ,存储过程批量插入1000万条记录进行慢查询测试

首先登陆进入Mysql命令行  执行sql      show variables like 'slow_query%';  结果为OFF 说明还未开启慢查询 执行sql     show variables like 'long_query_time';  可以看到具体的慢查询 ""时限" 我们先开启慢查询 执行sql set global slow_query_log='ON'; 这是再去查询一下(show variables like 'slow_query%';)发现