比如我现在要 INSERT 一条数据   里面VALUE的值  就是前面几个SELECT 出来的不同字段的值。
我现在的做法是  用到一个SELECT 出来的值  就定义一个变量去接收他 然后再写到INSERT 的 VALUE当中去。 但是现在VALUE当中需要大概有20多个值。按照现在的做法会很累。ORACEL中有没有类似于一个DATATABEL 类型的对象。可以往里面放数据的  然后我再使用的时候可以直接用DATATABEL.rows.item("xxxx")类似的方法 使用该字段内的值?PS:在请教一个问题:   我如何才能够在存储过程中取到 INSERT UPDATE DELETE的成功条数?

解决方案 »

  1.   

    用游標
    然后COUNT這個方便!
      

  2.   

    有几种方式,优缺点各异:
    1、将几个select 尝试写成一整条SQL2、通过存储过程,用游标取数据,然后INSERT
    (也就是你所提的方法,我感觉比较清晰,也不错啊,
    不太明白为什么会很累)至于你说的那种方式,没有研究过,不敢妄言。
      

  3.   

    DECLARE
       CURSOR c_cursor IS SELECT ename, sal FROM emp WHERE rownum<11;
       v_ename emp.ename%TYPE;
       v_sal emp.sal%TYPE
    ;
    BEGIN
       OPEN c_cursor;
       FETCH c_cursor INTO v_ename, v_sal;   WHILE c_cursor %FOUND LOOP
          DBMS_OUTPUT.PUT_LINE(v_ename||’---‘||to_char(v_sal) );
          FETCH c_cursor INTO v_ename, v_sal;
       END LOOP;
       CLOSE c_cursor;
    END;是不是这样用?
    但是用了游标好像还是要定义 相同数量的 变量去接收数据的。比如这里定义了两个v_ename v_sal 。要是需要接受的字段比较多怎么办? 我现在就超过20个了,是不是也必须定义20个去接受的?我现在就是希望能够少定义一些变量。游标可以实现吗?
      

  4.   

    PS:在请教一个问题:  我如何才能够在存储过程中取到 INSERT UPDATE DELETE的成功条数?用SQL%ROWCOUNT,显示操作的记录数,在COMMIT后清0
      

  5.   

    用table_typedeclare
      type emp_table_type is table of emp%rowtype index by binary_integer;
      emp_table emp_table_type;
      i int;
      i_count int;
      cursor emp_cursor is select * from emp;
    begin
    i:=1;
      for rec in emp_cursor loop
         exit when emp_cursor%notfound;
             emp_table(i).empno:=rec.empno;
             emp_table(i).sal:=rec.sal;
             emp_table(i).name:=rec.name;      
             dbms_output.put_line(emp_table(i).empno);
             i:=i+1;  
      end loop;
    end;
    这样可以吗??
      

  6.   

    if sql%nofound
        then ****