Skip to content

存储过程输出参数的执行

XuguConnection conn = new XuguConnection();
conn.ConnectionString = conn_xugu;

try
{
    conn.Open();
    XuguCommand cmd = new XuguCommand();
    cmd.Connection = conn;
    cmd.CommandText = "select count(*) from user_tables where table_name='TEST_CSH_PROC'";
    if (Convert.ToInt32(cmd.ExecuteScalar()) == 1)
    {
            cmd.CommandText = "drop table TEST_CSH_PROC cascade";
        cmd.ExecuteScalar();
    }
    cmd.CommandText = "CREATE TABLE TEST_CSH_PROC(ID INT,SS VARCHAR(20),KK DATE,SP NUMERIC(12,5),PP FLOAT,TT FLOAT)";
    cmd.ExecuteNonQuery();
    cmd.CommandText = "insert into TEST_CSH_PROC values(1,'testss',TO_DATE('2016-1-1 23:45:09','YYYY-MM-DD HH24:MI:SS'),321.34,123.123,321.123)";
    cmd.ExecuteNonQuery();
    cmd.CommandText = "insert into TEST_CSH_PROC values(1,'testss',TO_DATE('2016-1-1 23:45:09','YYYY-MM-DD HH24:MI:SS'),111.23,231.12,322)";
    cmd.ExecuteNonQuery();
    cmd.CommandText = "insert into TEST_CSH_PROC values(1,'testss',TO_DATE('2016-1-1 23:45:09','YYYY-MM-DD HH24:MI:SS'),234.123,986.234,9322)";
    cmd.ExecuteNonQuery();
    string sql_str = "CREATE OR REPLACE PROCEDURE P1(IN_ID IN OUT INT,OSS OUT VARCHAR,OKK OUT DATE,OSP  OUT NUMERIC,OPP OUT FLOAT,OTT OUT FLOAT)";
    sql_str += "AS TEMP_ID INT; BEGIN";
    sql_str += " select count(*),ss,kk,sum(sp),sum(pp),sum(tt) into temp_id,oss,okk,osp,opp,ott from TEST_CSH_PROC where id=IN_ID group by ss,kk;";
    sql_str += " IN_ID:=TEMP_ID; end;";
    cmd.CommandText = sql_str;
    cmd.ExecuteNonQuery();
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "P1";
    XuguParameters par_id = new XuguParameters("IN_ID", XuguDbType.Int);
    par_id.Direction = ParameterDirection.InputOutput;
    par_id.Value = 1;
    cmd.Parameters.Add(par_id);
    XuguParameters par_oss = new XuguParameters("OSS", XuguDbType.VarChar, 500);
    par_oss.Direction = ParameterDirection.Output;
    cmd.Parameters.Add(par_oss);
    XuguParameters par_okk = new XuguParameters("OKK", XuguDbType.DateTime);
    par_okk.Direction = ParameterDirection.Output;
    cmd.Parameters.Add(par_okk);
    XuguParameters par_osp = new XuguParameters("OSP", XuguDbType.Numeric);
    par_osp.Direction = ParameterDirection.Output;
    cmd.Parameters.Add(par_osp);
    XuguParameters par_opp = new XuguParameters("OPP", XuguDbType.Double);
    par_opp.Direction = ParameterDirection.Output;
    cmd.Parameters.Add(par_opp);
    XuguParameters par_ott = new XuguParameters("OTT", XuguDbType.Double);
    par_ott.Direction = ParameterDirection.Output;
    cmd.Parameters.Add(par_ott);
    cmd.ExecuteNonQuery();

    Console.WriteLine("in_id=" + par_id.Value.ToString());
    Console.WriteLine("oss=" + par_oss.Value.ToString());
    Console.WriteLine("okk=" + par_okk.Value.ToString());
    Console.WriteLine("osp=" + par_osp.Value.ToString());
    Console.WriteLine("opp=" + par_opp.Value.ToString());
    Console.WriteLine("ott=" + par_ott.Value.ToString());
    cmd.Dispose();
    conn.Dispose();

    return 0;
}
catch (System.Exception ex)
{
    Console.WriteLine(ex.ToString());
    conn.Close();
    return 0;
}