没分,往各位指点
create or replace procedure sp_test
(
  ID in varchar,     /*ID号*/
  aResul out types_auto.cursorType, /*返回的结果集*/
  aCode out integer, /*返回值 1成功 -1失败
  aErrMsg out varchar2 /*出错信息*/
 )
请问在.net里如何调这个存储过程

解决方案 »

  1.   

    先问楼主:上面的语法是oracle的语法吗?create or replace创建或替换。
      

  2.   

    我用了ODP.NET,单独返回数据集可以接收到数据,但是一加其他参数就会报参数错误,请有经验的朋友指点一下!!
      

  3.   

    恩:刚查了一下,oracle的语法是强大噢。你所说的参数问题,应该是传参数过程中的细节问题,你可以到网上搜一下
      

  4.   

    http://topic.csdn.net/u/20121018/07/b331af21-6cd1-4857-a24e-2a435361d06d.html?r=79928032看看上面这个是如何传参的。
      

  5.   

    http://wenku.baidu.com/view/21fa617d31b765ce050814ea.html
      

  6.   

    到底是Oracle存储过程的问题
    还是你调用的问题
      

  7.   

    存储过程没有问题,在oracle里面调试是正常的
      

  8.   

    在.net里调用单独返回数据集可以接收到数据,但是一加其他参数就会报参数错误
      

  9.   

    create or replace procedure sp_test
    (
      ID in varchar, /*ID号*/
      aResul out types_auto.cursorType, /*返回的结果集*/
      aCode out integer, /*返回值 1成功 -1失败
      aErrMsg out varchar2 /*出错信息*/
     )
    begin
       
       open aResul for
             select * from pats where pats._id = ID;         
          aCode := 1;
          aErrMsg := '查询成功';
          return;end sp_test;c#
    OracleCommand cmd=new OracleCommand("sp_test",conn);
    cmd.CommandType=CommandType.StoredProcedure;OracleParameter p_id=cmd.Parameters.Add("ID",OracleDbType.varchar2);
    p_id.Direction=ParameterDirection.Input;OracleParameter p_cursor=cmd.Parameters.Add("aResul",OracleDbType.RefCursor);
    p_cursor.Direction=ParameterDirection.Output;OracleParameter p_aCode=cmd.Parameters.Add("aCode",OracleDbType.Int32);
    p_aCode.Direction=ParameterDirection.Output;OracleParameter p_aErrMsg =cmd.Parameters.Add("aErrMsg",OracleDbType.varchar2);
    p_aErrMsg .Direction=ParameterDirection.Output;cmd.ExecuteScalar();//执行到这就报错
    单独调结果就去掉其他几个参数,执行成功,可以返回数据
      

  10.   

    你是直接连接oracle调用的,还是通过其它的或是webservice调用的。
      

  11.   

    OracleParameter p_id=cmd.Parameters.Add("ID",OracleDbType.varchar2);
    p_id.Direction=ParameterDirection.Input;这只是参数的名称,类型及参数是否输入输出类型。参数的值呢?
      

  12.   

    并且,最终要把参数交给cmd命令,你这是什么写法。只声明OracleParameter类型的参数,最后如何给cmd的。
      

  13.   

    OracleParameter p_id=cmd.Parameters.Add("ID",OracleDbType.varchar2);
    直接cmd.Parameters.Add
      

  14.   

    应该通过cmd.Parameters.Add(p_id)来把你的参数进行添加。你把你报错的代码贴出来吧。
      

  15.   

    给个参考吧
    存储过程根据DEPTNO获取SCOTT.EMP中的数据,如下
    CREATE OR REPLACE  PROCEDURE QUERY_EMP(P_DEPTNO   EMP.EMPNO%TYPE,
                                          EMP_CURSOR OUT SYS_REFCURSOR) IS
    BEGIN
      OPEN EMP_CURSOR FOR
        SELECT * FROM EMP WHERE DEPTNO = P_DEPTNO;END;调用:
    OracleConnection connection = new OracleConnection();
    string connectionString = "server=orcl;uid=scott;pwd=admin";
    connection.ConnectionString = connectionString;
    connection.Open();
    OracleCommand command = connection.CreateCommand();
    OracleDataAdapter dataAdapter = new OracleDataAdapter();
    dataAdapter.SelectCommand = command;
    command.CommandType = CommandType.StoredProcedure;
    command.CommandText = "QUERY_EMP";
    OracleCommandBuilder.DeriveParameters(command);
    String deptNo = "20";
    DataSet ds = new DataSet();
    command.Parameters[0].Value = deptNo;
    command.Parameters[1].Value = ds;
    dataAdapter.Fill(ds);
    this.dataGridView1.AutoGenerateColumns = true;
    this.dataGridView1.DataSource = ds.Tables[0];
    connection.Close();
      

  16.   

    (风的足迹)
    你说的那个方法我也试了
    ORA-06550:?1?,?7?:
    PLS-00306:??'sp_test' ?????????
    ORA-06550:?1?,?7?:
    PL/SQL:Statement ignored