各位请教:
 我想写个存储过程KPG_A(strSQL in varchar, tabtable out  table)这个存储过程 通过给出的SQL语句获得 数据,然后 把这个数据集 返回给外面调用的程序 。 这样能做到不哦?
或者,存储过程如何返回一个数据集 给外部

解决方案 »

  1.   

    用游标,举例
    CREATE OR REPLACE PROCEDURE emp_max_wage_proc(
    o_cur OUT SYS_REFCURSOR
    )
    IS
     BEGIN
      open o_cur for
      select * from a;
     END;
      

  2.   

    你是想要的输入sql语句和表名,查出结果集???对吗
      

  3.   

    刚才那个是一个关于游标的使用,你的需求不是很清楚,到底你的sql语句是什么样的?
    CREATE OR REPLACE PROCEDURE EMP_TEST
    (STRSQL IN VARCHAR2, -----SQL语句,至FROM为止
    TABTABLE IN VARCHAR2,-----表名
    O_CUR OUT SYS_REFCURSOR)---获取结果集
    IS
    V_SQL VARCHAR2(800);
    BEGIN
    V_SQL:=STRSQL||TABTABLE;
    OPEN O_CUR FOR V_SQL;
    END;写了个简单的~~
      

  4.   

    谢谢,那我在外面调用这个结果集 要怎么调用。
    在MSSQL里面,我直接把SELECT的结果集 直接放DATAGRIDVIEW里面。 可是在ORACLE里面我想 好像有点不一样
      

  5.   

    去google下存储过程在。net里的调用方法
      

  6.   


    import java.sql.CallableStatement;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;import oracle.jdbc.OracleTypes;public class TestProcedure { public static void main(String[] args) { try {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "test", "test");
    CallableStatement cstmt = con.prepareCall("{call testpackage.testproc(?,?)}");
    cstmt.setString(1, "7369");
    cstmt.registerOutParameter(2, OracleTypes.CURSOR);
    cstmt.execute();
    ResultSet rs = (ResultSet) cstmt.getObject(2);
    if (rs.next()) {
    System.out.println(rs.getString(1));
    System.out.println(rs.getString(2));
    System.out.println(rs.getString("JOB"));
    System.out.println(rs.getString("MGR"));
    }
    rs.close();
    cstmt.close();
    con.close();
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    } catch (SQLException ex) {
    ex.printStackTrace();
    }
    }
    }
    create or replace procedure testproc(v_empno varchar2, rs out SYS_REFCURSOR) is
      begin
        open rs for
          select * from emp where empno = v_empno;
      end testproc;
    给你个java版的
      

  7.   

    CREATE OR REPLACE PROCEDURE emp_max_wage_proc(
    o_cur OUT SYS_REFCURSOR
    )
    IS
     BEGIN
      open o_cur for
      select * from a;
     END;
    -------
    自己好好看看把 ,加油