oracle 存储过程的调用先请教一个问题 在oracle存储过程中传递参数时 参数类型有哪些,可不可以有集合类型的 比方说把一个数组作参数 甚至像一个dataset 数据集那样的 下面介绍问题: 在向数据库中两个表 主表和明细表 主表中有一自增字段作为主键,明细表中以此为外键,向两表中插入数据(假如 主表一条记录,明细表中10条), 现在我知道一种解决流程--利用序列的nextval的值保存到程序的一个变量中,再组装明细表中数据插入明细表.   
            现在我想知道 怎么利用存储过程来实现这个插入数据的过程,即怎么写这个存储过程,参数如何传递(如果我已经组装好向两个表中插入数据的SQL语句了,主表为一条语句【可以作为一个字符串】,明细表的为一组SQL 语句。或是也可以以别的参数传递方案),还有在C# 写的程序中如何调用这个存储过程,以及在存储过程中如何可以用事务处理来实现数据插入的完整性一致性(当有一条记录插入错误时,主表明细表插入的都回滚), 
           以上几点,只是现在我这样想的过程中问题 ,如有什么不合理的地方 敬请指出 ,还有诚希望有别的 可以向两表插入数据实现方案 来推荐 。
           在此提出希望大家不吝指导 ,再次感谢.

解决方案 »

  1.   

    1:oracle 存储过程中没有数组,但是可以使用表类型,和游标类型 来替代2:现在我知道一种解决流程--利用序列的nextval的值保存到程序的一个变量中,再组装明细表中数据插入明细表.   不需要的,你只要使用序列 :SEQ.CURRVAL就可以得到序列的当前值了,oracle 可以设置手动提交事务和自动提交事务,其实你写在一个存储过程里,出错的话ROOLBACK就可以了
      

  2.   

    樓上的方法很好。
    1、通過sequence給主表中插入一條記錄;
    2、使用游標實現對明細表中十條記錄的插入;
    3、在存儲過程中可以設置執行不成功即回滾。
      

  3.   


    EXCEPTION                when others then                    rollback;
                        return;
      

  4.   


    1.Oracle有关联数组和可变数组的概念,具体的例子请看,你可以使用集合类型作为参数。
    http://yy-mm-dd.javaeye.com/admin/blogs/831889
    http://yy-mm-dd.javaeye.com/admin/blogs/832384
    2.nextvalue,不需要使用变量保存,直接在你的sql_statement里面使用就行了
      

  5.   

    1、oracle可以传递数组,可以自定义数字类型 type
    2、插入明细在过程中循环就可以了
    3、过程事物控制是在正常的数据操作完成后commit提交,在exception是用roolback回滚