c# oracle 存储过程 数组参数

sirtener 2011-04-28 10:10:19
在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#中如何提交定义中的数据类型,有这方面经验的朋友帮忙哈, 谢谢!!!
...全文
371 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
celeron729 2011-09-23
  • 打赏
  • 举报
回复
C#中,存储过程输入一维数组参数是可以的

问:如何读取存储过程输出的数组参数
sirtener 2011-05-05
  • 打赏
  • 举报
回复
首先谢谢大家抽出时间来解答我的问题。
经过这几天的思考,代码测试,现在这个问题得到了解决。
c#中对oralce只支持一维数组参数的传递,对于其二维数组的传递目前是没有找到对应的方法,采用一维数组字符串形式将数据传入存储过程,一维数据中的数据是以分隔符连接的字符串,然后在存储过程中分割字符串生成自定义对象实例,然后再做其他的操作。
这是我目前采用的方式。在java中可以实现二维数组参数传递,甚至可以采用多维数组传递。
sirtener 2011-05-05
  • 打赏
  • 举报
回复
cuihaiyang
谢谢您的提醒,这仅仅是我的一个测试程序,并不是真正应用程序中的代码。在实际应用程序中在存储过程中的处理就不止这么简单。
sirtener 2011-05-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bobo12082119 的回复:]
C# code

//参考:
//在程序中定义一个数组类型的rec_items
//并为其赋初值,数组元素的个数与数据库中你定义的记录类型相同
//再调用过程的地方传递参数时,
//pro_po_action(p_items rec_items, vcreback out varchar2)
//对应rec_items记录类型的地方传递我们定义的数组.
[/Quote]

现在主要是传不过去, 提示“数组赋值类型必须与表的行类型匹配”,还望详解,谢谢;

[Quote=引用2 楼 yejihui9527 的回复:]
不行就结构体吧
[/Quote]

结构体? 还望详解,谢谢
cuisea 2011-05-03
  • 打赏
  • 举报
回复
首先怀疑你这种做法的合理性,你写这个存储过程就是想将一个集合中的记录插入表中,这种情况在编程中经常遇到,不过一般都是在程序里循环集合中的记录,很少通过存储过程,毕竟程序控制起来比较简单。如果是为了减少数据库资源的占用个人认为有两种方式:
1、把sql语句拼在一起,一次发送到数据库
2、保持数据库连接是打开的(即connection是open状态),这样可以避免每插入一条记录就要创建数据库连接。
欢迎大家提出好的方法
yejihui9527 2011-04-28
  • 打赏
  • 举报
回复
不行就结构体吧
304的的哥 2011-04-28
  • 打赏
  • 举报
回复

//参考:
//在程序中定义一个数组类型的rec_items
//并为其赋初值,数组元素的个数与数据库中你定义的记录类型相同
//再调用过程的地方传递参数时,
//pro_po_action(p_items rec_items, vcreback out varchar2)
//对应rec_items记录类型的地方传递我们定义的数组.

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧