在oracle数据库中定义包以及包体,在包中定义类型与存储过程 type rec_item is record(
r_name varchar2(200),
r_value varchar2(20000),
r_type varchar2(20),
r_format varchar2(50),
r_default varchar2(20000)
);
type rec_items is table of rec_item index by binary_integer;
procedure pro_po_action(p_items rec_items, vcreback out varchar2);在包体中实现存储过程 procedure pro_po_action(p_items rec_items, vcreback out varchar2) is
v_item rec_item ;
v_seq number default 1;
begin
vcreback := '';
if p_items.count = 0 then
vcreback := '传入信息项为空!';
return;
end if;
for v_seq in 1..p_items.count loop
v_item := p_items(v_seq);
insert into t_po_item (ilineid, vcname, vcvalue, vctype, vcformat, vcdefaultvalue, dtdate)
values (seq_po_ilineid.nextval, v_item.r_name, v_item.r_value, v_item.r_type, v_item.r_format, v_item.r_default, sysdate);
end loop;
vcreback := '成功执行数据记录添加!';
end pro_po_action;我想问的是, 如何在c#中如何提交定义中的数据类型,有这方面经验的朋友帮忙哈, 谢谢!!!
r_name varchar2(200),
r_value varchar2(20000),
r_type varchar2(20),
r_format varchar2(50),
r_default varchar2(20000)
);
type rec_items is table of rec_item index by binary_integer;
procedure pro_po_action(p_items rec_items, vcreback out varchar2);在包体中实现存储过程 procedure pro_po_action(p_items rec_items, vcreback out varchar2) is
v_item rec_item ;
v_seq number default 1;
begin
vcreback := '';
if p_items.count = 0 then
vcreback := '传入信息项为空!';
return;
end if;
for v_seq in 1..p_items.count loop
v_item := p_items(v_seq);
insert into t_po_item (ilineid, vcname, vcvalue, vctype, vcformat, vcdefaultvalue, dtdate)
values (seq_po_ilineid.nextval, v_item.r_name, v_item.r_value, v_item.r_type, v_item.r_format, v_item.r_default, sysdate);
end loop;
vcreback := '成功执行数据记录添加!';
end pro_po_action;我想问的是, 如何在c#中如何提交定义中的数据类型,有这方面经验的朋友帮忙哈, 谢谢!!!
//参考:
//在程序中定义一个数组类型的rec_items
//并为其赋初值,数组元素的个数与数据库中你定义的记录类型相同
//再调用过程的地方传递参数时,
//pro_po_action(p_items rec_items, vcreback out varchar2)
//对应rec_items记录类型的地方传递我们定义的数组.
1、把sql语句拼在一起,一次发送到数据库
2、保持数据库连接是打开的(即connection是open状态),这样可以避免每插入一条记录就要创建数据库连接。
欢迎大家提出好的方法
谢谢您的提醒,这仅仅是我的一个测试程序,并不是真正应用程序中的代码。在实际应用程序中在存储过程中的处理就不止这么简单。
经过这几天的思考,代码测试,现在这个问题得到了解决。
c#中对oralce只支持一维数组参数的传递,对于其二维数组的传递目前是没有找到对应的方法,采用一维数组字符串形式将数据传入存储过程,一维数据中的数据是以分隔符连接的字符串,然后在存储过程中分割字符串生成自定义对象实例,然后再做其他的操作。
这是我目前采用的方式。在java中可以实现二维数组参数传递,甚至可以采用多维数组传递。