首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

c#中调用oracle数据库的(100分,咨询函数调用有关问题)

2011-12-17 
c#中调用oracle数据库的高手进(100分,咨询函数调用问题)现定义函数CS_CSJS_ZZ如下,在函数体中有一返回值re

c#中调用oracle数据库的高手进(100分,咨询函数调用问题)
现定义函数CS_CSJS_ZZ如下,在函数体中有一返回值return   1,不用看具体函数的意义,我现在就是先确定一下,调用函数都会有一个返回值,但是在该函数中return模块中变量较多,而最终只返回一个1,我该如何定义一个变量来获取这个return值

CREATE   OR   REPLACE   FUNCTION   CS_CSJS_ZZ
                          (an_zt_hh         IN           NUMBER,    
                            an_kjnd           IN           NUMBER,    
                            an_qsqj           IN           NUMBER,    
                            an_jsqj           IN           NUMBER,    
                            an_czyh_hh     IN           NUMBER      
                            )
                        RETURN   NUMBER   IS
                            lvc_cwhdm   VARCHAR2(32);
                            ln_kjzd_hh   number(20);
                            ln_bwb_hh   number(20);  
                            li_qjjsq   INTEGER;
                            CURSOR   lc_kjkm   IS                      
                                    SELECT   KJKM_HH   FROM   V_ZZ_ZTKM   WHERE   JL_SC_BZ   = '0 '   AND   KJND   =   an_kjnd   AND   ZT_HH   =   an_zt_hh   ORDER   BY   kjkmdm;
                            lt_kjkm   number(20);
                            ln_lsjl_hh   number(20);
                            ln_qyqj   number(10);  
                            ln_sykjqj   number(10);
                            ln_qynd   number(4);    
                            ln_nmqj   number(10);
                            ln_ncqj   number(10);
                            lc_yjz_bz   char;
                            ln_jg   NUMBER;


BEGIN    
    P_ZZ_QZTQYQJ(an_zt_hh,ln_qynd,ln_qyqj,ln_sykjqj,lc_yjz_bz);    
    SELECT   MIN(QJXH),   MAX(QJXH)   INTO   ln_ncqj,   ln_nmqj   FROM   ZZ_KJQJ   WHERE   JL_SC_BZ   = '0 '   AND   QSRQ   > =   (SELECT   QYRQ   FROM   ZZ_ZT   WHERE   JL_HH=   an_zt_hh)   AND   KJND   =   an_kjnd   AND   ZT_HH   =   an_zt_hh;    
    SELECT   DECODE(an_qsqj   -   1,0,1,an_qsqj   -   1),   KJZD_HH,   BWB_HH   INTO   ln_sykjqj,   ln_kjzd_hh,   ln_bwb_hh   FROM   ZZ_ZT   WHERE   JL_HH   =   an_zt_hh;    
    li_qjjsq   :=   an_qsqj;
    LOOP
          EXIT   WHEN   li_qjjsq   >   an_jsqj;
          IF   li_qjjsq   > =   ln_ncqj   AND   li_qjjsq   <=   ln_nmqj   THEN          
          SELECT   JL_HH   INTO   ln_lsjl_hh   FROM   ZZ_KJQJ   WHERE   JL_SC_BZ   =   '0 '   AND   QJXH   =   li_qjjsq   AND   KJND   =   an_kjnd   AND   ZT_HH   =   an_zt_hh   FOR   UPDATE;          
          OPEN   lc_kjkm;
          LOOP
                FETCH   lc_kjkm   INTO   lt_kjkm;
                EXIT   WHEN   lc_kjkm%NOTFOUND;              
                ln_jg   :=   CS_CSJS_KMQJQC_ZZ(an_zt_hh,   lt_kjkm.KJKM_HH,   an_kjnd,   li_qjjsq,   ln_sykjqj,   ln_qynd,   ln_qyqj,   an_czyh_hh);                       ln_jg   :=   CS_CSJS_KMQJQC_FZZZ(an_zt_hh,   lt_kjkm.KJKM_HH,   an_kjnd,   li_qjjsq,   ln_sykjqj,   ln_qynd,   ln_qyqj,   an_czyh_hh);
                ln_jg   :=   CS_CSJS_KMQJ_ZZ(ln_kjzd_hh,   an_zt_hh,   ln_bwb_hh,   lt_kjkm.KJKM_HH,   an_kjnd,   li_qjjsq,   an_czyh_hh);
                ln_jg   :=   CS_CSJS_KMQJ_FZZZ(ln_kjzd_hh,   an_zt_hh,   ln_bwb_hh,   lt_kjkm.KJKM_HH,   an_kjnd,   li_qjjsq,   an_czyh_hh);
          END   LOOP;
          CLOSE   lc_kjkm;
          COMMIT;
          END   IF;
          ln_sykjqj   :=   li_qjjsq;
          li_qjjsq   :=   li_qjjsq   +   1;
    END   LOOP;


    RETURN   1;


EXCEPTION
    WHEN   OTHERS   THEN
              IF   lc_kjkm%ISOPEN   THEN
                    CLOSE   lc_kjkm;
              END   IF;
              ROLLBACK;
END   CS_CSJS_ZZ;
/


我的代码如下:

                        OracleConnection   oc   =   new   OracleConnection(conn);


                        OracleCommand   ocd   =   new   OracleCommand( "CS_CSJS_ZZ ",   oc);
                        ocd.CommandType   =   CommandType.StoredProcedure;
                     
                        OracleParameterCollection   opc   =   ocd.Parameters;
                        opc.Clear();
                        opc.Add(new   OracleParameter( "an_zt_hh ",   OracleType.Number));
                        opc[ "an_zt_hh "].Value   =   2302007041700000261;

                        opc.Add(new   OracleParameter( "an_kjnd ",   OracleType.Number));
                        opc[ "an_kjnd "].Value   =   2007;

                        opc.Add(new   OracleParameter( "an_qsqj ",   OracleType.Number));
                        opc[ "an_qsqj "].Value   =   4;

                        opc.Add(new   OracleParameter( "an_jsqj ",   OracleType.Number));
                        opc[ "an_jsqj "].Value   =   5;

                        opc.Add(new   OracleParameter( "an_czyh_hh ",   OracleType.Number));
                        opc[ "an_czyh_hh "].Value   =   99;
                         
                       
                        //return模块中声明的变量,这些变量不应该是rerurnvalue吧,该如何声明这些变量?

                        opc.Add(new   OracleParameter( "lvc_cwhdm ",   OracleType.VarChar,32));
                        opc[ "lvc_cwhdm "].Direction   =   ParameterDirection.Output;

                        opc.Add(new   OracleParameter( "ln_kjzd_hh ",   OracleType.Number));
                        opc[ "ln_kjzd_hh "].Direction   =   ParameterDirection.ReturnValue;

                        opc.Add(new   OracleParameter( "ln_bwb_hh ",   OracleType.Number));
                        opc[ "ln_bwb_hh "].Direction   =   ParameterDirection.ReturnValue;

                        opc.Add(new   OracleParameter( "li_qjjsq ",   OracleType.Int32));


                        opc[ "li_qjjsq "].Direction   =   ParameterDirection.ReturnValue;

                        opc.Add(new   OracleParameter( "lc_kjkm ",   OracleType.Cursor));
                        opc[ "lc_kjkm "].Direction   =   ParameterDirection.ReturnValue;

                        opc.Add(new   OracleParameter( "lt_kjkm ",   OracleType.Number));
                        opc[ "lt_kjkm "].Direction   =   ParameterDirection.ReturnValue;

                        opc.Add(new   OracleParameter( "ln_lsjl_hh ",   OracleType.Number));
                        opc[ "ln_lsjl_hh "].Direction   =   ParameterDirection.ReturnValue;

                        opc.Add(new   OracleParameter( "ln_qyqj ",   OracleType.Number));
                        opc[ "ln_qyqj "].Direction   =   ParameterDirection.ReturnValue;

                        opc.Add(new   OracleParameter( "ln_sykjqj ",   OracleType.Number));
                        opc[ "ln_sykjqj "].Direction   =   ParameterDirection.ReturnValue;

                        opc.Add(new   OracleParameter( "ln_qynd ",   OracleType.Number));
                        opc[ "ln_qynd "].Direction   =   ParameterDirection.ReturnValue;

                        opc.Add(new   OracleParameter( "ln_nmqj ",   OracleType.Number));
                        opc[ "ln_nmqj "].Direction   =   ParameterDirection.ReturnValue;

                        opc.Add(new   OracleParameter( "ln_ncqj ",   OracleType.Number));
                        opc[ "ln_ncqj "].Direction   =   ParameterDirection.ReturnValue;

                        opc.Add(new   OracleParameter( "lc_yjz_bz ",   OracleType.Char,1));
                        opc[ "lc_yjz_bz "].Direction   =   ParameterDirection.ReturnValue;

                        opc.Add(new   OracleParameter( "ln_jg ",   OracleType.Number));
                        opc[ "ln_jg "].Direction   =   ParameterDirection.ReturnValue;
                               


                        try
                        {
                                oc.Open();

                                decimal   a   =   convert.todecimal(ocd.ExecuteScalar());                                
                               
                        }
                        catch   (OracleException   oe)
                        {
                                MessageBox.Show(oe.Message);
                        }
                        finally
                        {
                                oc.Close();
                        }

声明return模块中的变量后,执行时就会抱ora-06550错误,
如果不声明return中的变量,就会提示cs_csjs_zz不是存储过程,如果对我的描述不是太清楚的话,可以提出来,我会把需要的东西都贴出来,希望大家能够帮忙解决.谢谢!!!!

[解决办法]
selet CS_CSJS_ZZ(parm1,parm2) as return_value from dual;
读取结果集就行了,一行,一列
[解决办法]
你这存储过程返回值只有一个呀,RETURN NUMBER。
怎么写那么多ParameterDirection.ReturnValue。
[解决办法]
你这函数只有一个返回值,要得到返回值selet CS_CSJS_ZZ(parm1,parm2) INTO ... from dual;
把函数的返回值放到一个变量里就成

热点排行