Oracle存储过程,将“表”作为参数传入的问题

zhaoweiting0609 2009-08-08 08:13:02
现在在做一个项目,C#+Oracle,用的是vs2005,.net2.0的OraceClient.dll,Oracle10g
我想将表,DataTable作为一个参数出入数据库进行批量的处理,因为从数据库中读出的数据在内存中做了很多的处理,需要批量的更新数据库。
我现在不明白的两点:
第一,传入Oracle存储过程中的时候,在C#代码中,怎么写传入的类型?OracleType.Cursor类型吗?还是别的什么类型?
第二,在存储过程中,怎么定义这个表的类型,怎么进行操作这个表?

谢谢!
...全文
827 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
billhost 2009-08-13
  • 打赏
  • 举报
回复
可以传入表名,然后在过程里面用游标来做
type v_tcursor is ref cursor;
v_cursor v_tcursor;
begin
v_sql:='select * from '||p_tname;
open v_cursor for v_sql;
end;
zw393 2009-08-13
  • 打赏
  • 举报
回复
实现方案1
先把数据存入一个临时表中(insert操作)
然后再存储过程中操作这个临时表的数据

实现方案2
在db中建立一个数组类型(type),每个数组对应你的表的一列数据,这样你才能够将整个表数据传入存储过程处理。在这里你最好控制好你可护短的表的记录数,可能会一样性能。如果数据量大,你最好采用批处理方式。

以上2种实现方式仅供参考。
ojuju10 2009-08-13
  • 打赏
  • 举报
回复
脚步(表名、字段名、数据库名)作为参数,需要用动态的sql来执行

需要用execute immediate来运行
zhaoweiting0609 2009-08-11
  • 打赏
  • 举报
回复
您说的数组我是知道的,但是数组的处理比较麻烦,我看了10g中可以自定义表,进行相应的处理;您说的batchupdate我可以验证一下,谢谢!
inthirties 2009-08-08
  • 打赏
  • 举报
回复
是单张表的话,不需要做这么复杂了,直接有程序调用batchupdate的接口就可以了。

对于C#不是很清楚了,不过java的jdbc就是提供了batchupdate的功能了,c#有很对都和java比较相似,这里是不是也有这样的接口呀。

如果不用这样的形式的话,就用数组作为传入参数,然后遍历这个数组就来update指定的记录就可以了。

关于数组的定义和使用可以g一下相关的用法。

shiyiwan 2009-08-08
  • 打赏
  • 举报
回复
没有做过,期待楼下
zhaoweiting0609 2009-08-08
  • 打赏
  • 举报
回复
传入的是整张表,因为数据从数据库中读到内存以后进行了修改,增加列等操作,这些信息要回写回数据库。
shiyiwan 2009-08-08
  • 打赏
  • 举报
回复
第二:传的是表名还是整表的数据?若是表名则用动态sql,若是整表数据用cursor,问题是数据还是从数据库得来的,所以传入参数用表名比较合适。

3,492

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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