我的意思是跟sql server 一样通过存储过程获取一个表,然后通过vb.net 获取此存储过程的表数据,我的存储过程如何做,vb.net 如何调用?

解决方案 »

  1.   

    参考sql:
    create or replace procedure sp_getdata (a_data_cur out sys_refcursor)
    is
    begin
       open sys_refcursor for 'select * from tab';
    end;
      

  2.   

    修正sql:
    create or replace procedure sp_getdata (a_data_cur out sys_refcursor)
    is
    begin
      open a_data_cur for 'select * from tab';
    end;
      

  3.   

    调用存储过程参考:http://topic.csdn.net/t/20031123/14/2485859.html
      

  4.   

    不要用存储过程
     
    如果是查询,就直接在代码中用sql语句oracle存储过程不支持直接写sql语句的,是通过游标来实现 ,比较麻烦的
      

  5.   

    zhangwonderful:你好,我创建好了,如何调用此存储过程?
      

  6.   

    DECLARE 
         cursor c_1 is select * from emp;     --定义游标
         r c_1%rowtype;      --定义一个行对象,用于获得游标的值
    BEGIN
         if c_1%isopen then
              CLOSE c_1;
         end if;               
         OPEN c_1;          --判断游标是否打开.如果开了将其关闭,然后在打开
         LOOP
           FETCH c_1 INTO r;     --取值
            EXIT WHEN c_1%NOTFOUND;     --如果游标没有取到值,退出循环.       
         END LOOP;
    END;
    r代表一行数据,r.name代表字段值,我没学vb.net,只能给你个取数据的思路。
      

  7.   

    再给你个网址,看看那个思路:http://wenku.baidu.com/view/2bb0cad376eeaeaad1f33048.html
    这问题应该能解决了
      

  8.   

    我的意思是返回多行的表,然后显示在vb.net中
      

  9.   

    原理就是这个:这是我用java查的数据:
    package jdbc;import java.sql.CallableStatement;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;import junit.framework.TestCase;public class CallProcedure extends TestCase {
    public void testCase() {
    Connection conn = null;
    CallableStatement cs = null;
    ResultSet result = null;
    try {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    conn = DriverManager.getConnection(
    "jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger");
    cs = conn.prepareCall("{call selectAll(?)}");
    cs.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
    cs.execute();

    result = (ResultSet) cs.getObject(1); while(result.next()) {
    System.out.println(result.getString(1)+"和"+result.getString(2));
    }
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } finally {
    try {cs.close();
    conn.close();
    result.close();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }
    }
    }