能否将datatable作为参数传给oracle数据库存储过程

ql_nanjing 2018-02-08 05:17:15
在做C#开发,通过存储过程完成多条表数据的插入,想直接把要插入的数据以datatable表的形式作为参数传递给存储过程,请问该如何实现?存储过程该如何写?
...全文
1864 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
佛不问苍生 2018-02-23
  • 打赏
  • 举报
回复
转成JSON吧,那样就可以了。
ql_nanjing 2018-02-14
  • 打赏
  • 举报
回复
跪求指教啊!
桂圆214 2018-02-14
  • 打赏
  • 举报
回复
初步了解,你的意思是想把表名字作为一个参数传入存储,然后从中查询数据再插入另外一张同结构的表。由于你传入的表名字是字符串,存储过程是不能直接用字符串拼接sql语句运行的,建议存储过程内部生命字符串变量,先组装成查询语句Script字符串,然后用 Open emp_cur For Script; Loop Fetch emp_cur Into my_record ; Exit When emp_cur %Notfound; inset........; End loop; Close Mycursor
ql_nanjing 2018-02-12
  • 打赏
  • 举报
回复
引用 8 楼 weixin_41637486 的回复:
你的意思是,你想传入一个表名,然后这个表名跟你想要的表的定义是一样的 然后用游标一直在那插入数据这样对吧
是的,不知道这样可不可行!
Mricoo_周 2018-02-11
  • 打赏
  • 举报
回复
你的意思是,你想传入一个表名,然后这个表名跟你想要的表的定义是一样的 然后用游标一直在那插入数据这样对吧
Mricoo_周 2018-02-11
  • 打赏
  • 举报
回复
引用 6 楼 ql_nanjing 的回复:
我想问的是怎么实现datatable参数传递, create or replace procedure emp_addmembers_proc(p_dt in emp_addmembers) as cursor emp_cur is select * from p_dt; my_record emp_cur%rowtype; begin open emp_cur; loop fetch emp_cur into my_record; insert into emp (eid, ename, job, sal) values (my_record.eid, my_record.ename, my_record.job, my_record.sal); end loop; close emp_cur; end; 这是我的存储过程,emp_addmembers是自定义的与我要传递的datatable格式相同的表类型,但编译报错,提示表或视图不存在,游标声明不完整!
上面的p_dt in emp_addmembers 改成p_dt in varchar2 就行 你试试
ql_nanjing 2018-02-11
  • 打赏
  • 举报
回复
我想问的是怎么实现datatable参数传递, create or replace procedure emp_addmembers_proc(p_dt in emp_addmembers) as cursor emp_cur is select * from p_dt; my_record emp_cur%rowtype; begin open emp_cur; loop fetch emp_cur into my_record; insert into emp (eid, ename, job, sal) values (my_record.eid, my_record.ename, my_record.job, my_record.sal); end loop; close emp_cur; end; 这是我的存储过程,emp_addmembers是自定义的与我要传递的datatable格式相同的表类型,但编译报错,提示表或视图不存在,游标声明不完整!
卖水果的net 2018-02-09
  • 打赏
  • 举报
回复
引用 3 楼 ql_nanjing 的回复:
能不能给个案例!
1# 就是案例
ql_nanjing 2018-02-09
  • 打赏
  • 举报
回复
能不能给个案例!
  • 打赏
  • 举报
回复
可以 要用动态sql
卖水果的net 2018-02-09
  • 打赏
  • 举报
回复
拼接成这样的 insert into t() select c11, c21 from dual union all select c12, c22 from dual
  • 打赏
  • 举报
回复
个人曾经写过的数据访问接口,包含:MSSQL、Mysql、Oracle数据库的公共处理接口。可以拿过来直接使用,放在手里好多年了。 IDatabase接口声明如下: namespace Simple.Database { /// /// IDatabase 接口 /// public interface IDatabase { DbConnection dbConn { get; set; } /// /// 创建 DbConnection 对象实例。 /// /// DbConnection 对象实例。 DbConnection CreateConnection(); /// /// 创建 DbCommand 对象实例。 /// /// DbCommand 对象实例。 DbCommand CreateCommand(); /// /// 创建 DbCommand 对象实例。 /// /// Sql 语句或存储过程名。 /// CommandType 参数。 /// DbCommand 对象实例。 DbCommand CreateCommand(string text, CommandType type); /// /// 创建 DbCommand 对象实例。 /// /// Sql 语句或存储过程名。 /// CommandType 参数。 /// 参数集合。 /// DbCommand 对象实例。 DbCommand CreateCommand(string text, CommandType type, IDataParameter[] paras); /// /// 创建 DbCommand 对象实例。 /// /// DbConnection 对象。 /// Sql 语句或存储过程名。 /// CommandType 参数。 /// 参数集合。 /// DbCommand 对象实例。 DbCommand CreateCommand(DbConnection conn, string text, CommandType type, IDataParameter[] paras); /// /// 创建 DbDataAdapter 对象实例。 /// /// DbDataAdapter 对象实例。 DbDataAdapter CreateDataAdapter(); /// /// 创建 DbParameter 对象实例。 /// /// DbParameter 对象实例。 DbParameter CreateParameter(); /// /// 创建 DbParameter 对象实例。 /// /// 参数名称。 /// 参数值。 /// DbParameter 对象实例。 DbParameter CreateParameter(string name, Object value); /// /// 创建 DbParameter 对象实例。 /// /// 参数名称。 /// 参数类型。 /// DbParameter 对象实例。 DbParameter CreateParameter(string name, DbType type); /// /// 创建 DbParameter 对象实例。 /// /// 参数名称。 /// 参数类型。 /// 数据的最大大小。 /// DbParameter 对象实例。 DbParameter CreateParameter(string name, DbType type, int size); /// /// 获取指定长度数据的 DataSet 对象。 /// /// 要读取的 Sql 语句。 /// 开始读取位置的索引。 /// 待读取记录集的长度。 /// DataSet 对象。 DataSet GetDataSet(string sql, int start, int length); /// /// 获取指定长度数据的 DataTable 对象。 /// /// 要读取的 Sql 语句。 /// 开始读取位置的索引。 /// 待读取记录集的长度。 /// DataTable 对象。 DataTable GetDataTable(string sql, int start, int length); /// /// 执行Insert、Update、Delete等操作,并返回受影响的记录数。 /// /// 要执行的 Sql 语句。 /// 受影响的记录数。 int GetEffect(string sql); /// /// 执行 Insert、Update、Delete 等操作,并返回受影响的记录数。 /// /// 要执行的 Sql 语句或存储过程名等。 /// CommandType 的类型,即该命令是 Sql 语句,还是存储过程名等。 /// 受影响的记录数。 int GetEffect(string sql, CommandType type); /// /// 执行带参数的 Sql 语句或存储过程,并返回受影响的记录数。 /// /// 要执行的 Sql 语句或存储过程名等。 /// CommandType 参数类型,即该命令是 sql 语句,还是存储过程名等。 /// 参数集合。 /// 受影响的记录数。 int GetEffect(string text, CommandType type, IDataParameter[] paras); /// /// /// /// /// /// /// /// /// int GetEffect(DbConnection conn, string text, CommandType type, IDataParameter[] paras, DbTransaction DbTrans); /// /// /// /// /// List ExecuteTransaction(params string[] sqls); /// /// 执行 Select 语句,并返回 DataSet 对象。 /// /// 要执行的 Sql 语句。 /// DataSet 对象。 DataSet GetDataSet(string sql); /// /// 执行 Select 语句或存储过程,并返回 DataSet 对象。 /// /// 要执行的 Sql 语句或存储过程名等。 /// CommandType 参数类型,即该命令是 sql 语句,还是存储过程名等。 /// DataSet 对象。 DataSet GetDataSet(string text, CommandType type); /// /// 执行带参数的 Sql 语句或存储过程,并返回 DataSet 对象。 /// /// 要执行的 Sql 语句或存储过程名等。 /// CommandType 参数类型,即该命令是 sql 语句,还是存储过程名等。 /// 参数集合。 /// DataSet 对象。 DataSet GetDataSet(string text, CommandType type, IDataParameter[] paras); /// /// 执行 Select 语句,并返回 DataTable 对象。 /// /// 要执行的 Sql 语句。 /// DataTable 对象。 DataTable GetDataTable(string sql); /// /// 执行 Select 语句或存储过程,并返回 DataTable 对象。 /// /// 要执行的 Sql 语句或存储过程名等。 /// CommandType 参数类型,即该命令是 sql 语句,还是存储过程名等。 /// DataTable 对象。 DataTable GetDataTable(string text, CommandType type); /// /// 执行带参数的 Sql 语句或存储过程,并返回 DataTable 对象。 /// /// 要执行的 Sql 语句或存储过程名等。 /// CommandType 参数类型,即该命令是 sql 语句,还是存储过程名等。 /// 参数集合。 /// DataTable 对象。 DataTable GetDataTable(string text, CommandType type, IDataParameter[] paras); /// /// 获取查询所返回的结果集中第一行第一列的值。 /// /// 要处理的 sql 语句(包含待查询的字段)。 /// 字段值。 object GetField(string sql); /// /// 获取查询所返回的结果集中第一行指定列的值。 /// /// 待查询的数据表名称。 /// 待获取字段的列名。 /// 字段值。 object GetField(string sql, string field); /// /// 获取查询所返回的结果集中第一行指定列集合的值。 /// /// 要处理的 sql 语句。 /// 待获取字段的列表。 /// 字段值集合。 object[] GetField(string sql, params string[] fields); } }

17,086

社区成员

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

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