消息关闭
    暂无新消息!
两个C# 程序,都是去访问Oracle数据库的,一个有问题,创建了Oracle连接对象后调用Open方法时报错
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-06502: PL/SQL: 数字或值错误 : character string buffer too small
 ORA-06512: 在 line 127

网上搜索时都说什么sql语句哪里哪里有问题,又是路径不能有括号什么的,但是我debug发现程序报错是在调用Open方法时(Open执行失败了)

 然后我自己又写了一个单独的小程序,结果发现可以正常访问数据库并执行sql语句获取结果,太奇怪了

 我都是在窗体上画个Button,在Button点击事件里执行同样的代码,怎么就出现不一样的结果呢

 下面是Button点击事件里执行的代码
string wo_noStrs = "'LFF11705174','LFF11705184','LFF11705220','LFF11705255','LFF11705256','LFF11705328','LFF11705329','LFF11705331','LFF11705332','LFF11705333','LFF11706000','LFF11706001','LFF11706034','LFF11706082','LFF11706092','LFF11706095','LFF11706138','LFF11706139','LFF11706140','LFF11706143','LFF11706144','LFF11706145','LFF11706146','LFF11706147','LFF11706148','LFF11706149','LFF11706150','LFF11706151','LFF11706152','LFF11706158','LFF11706181','LFF11706182','LFF11706183','LFF11706184','LFF11706219','LFF11706220','LFF11706227','LFF11706232','LFF11706233','LFF11706234','LFF11706264','LFF11706265','LFF11706266','LFF11706267','LFF11706268','LFF11706270','LFF11706271','LFF11706273','LFF11706274','LFF11706276','LFF11706277','LFF11706278','LFF11706304','LFF21705242','LFF21706086','LFF21706087','LFF21706088','LFF21706089','LFF21706321','LFF21706322','LFF21706346','LFF21706379','LFF21706380','LFF21706383','LFF21706418','LFF21706419','LFF21706420','LFF21706421','LFF21706429','LFF21706431','LFF21706432','LFF21706433','LFF21706434','LFF21706435','LFF21706436','LFF21706446','LFF21706459','LFF21706460','LFF21706462','LFF21706463','LFF21706464','LFF21706468','LFF21706469','LFF21706470','LFF21706471','LFF21706472','LFF21706473','LFF21706500','LFF31705056','LFF31706008','LFF31706009','LFF31706018','LFF31706019','LFF31706020','LFF31706021','LFF31706022','LFF31706024','LFF31706039','LFF31706040','LFF31706041','LFF31706042','LFF31706043','LFF31706044','LFF31706045','LFF31706046','LFF31706049','LFF31706050','LFF31706061','LFF31706062','LFF31706072','LFF31706076','LFF31706077','LFF31706078','LFF31706079','LFF31706080','LFF31706096','LFF31706100','LFP11705012','LFP21706004','LFP21706005','LFP21706006','LFP21706007','LFP21706008','LFP21706009','LFP21706010','SFP11706005'";
            List<string> logs = new List<string>();
            string connStr_ERP = "Data Source=AIX_ERP_PROD;User ID=query_user;Password=query_user;";
            OracleConnection conn = new OracleConnection(connStr_ERP);
            try
            {
                string sql = string.Format("select round(sum(MRO.QUANTITY_PER_ASSEMBLY)),nvl(wdj.date_completed,to_date('1111/11/11','YYYY/MM/DD HH:MI:SS'))  from WIP_ENTITIES     WE, WIP_REQUIREMENT_OPERATIONS MRO,       MTL_SYSTEM_ITEMS           MSI,       FND_USER                   FU, WIP_DISCRETE_JOBS          WDJ where MRO.WIP_ENTITY_ID = WE.WIP_ENTITY_ID  and WDJ.Wip_Entity_Id=WE.WIP_ENTITY_ID and MRO.ORGANIZATION_ID = MSI.ORGANIZATION_ID   and MRO.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID   and MRO.LAST_UPDATED_BY = FU.USER_ID(+)   AND WE.WIP_ENTITY_NAME in ({0}) group by we.wip_entity_name,wdj.date_completed order by we.wip_entity_name", wo_noStrs);
                OracleCommand cmd = new OracleCommand(sql, conn);
                conn.Open();
                //MessageBox.Show(conn.State.ToString());
                OracleDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    logs.Add(reader[0].ToString() + "***" + reader[1].ToString());
                }
            }
            catch (Exception ex)
            {
                logs.Add(ex.Message);
            }
            finally
            {
                conn.Close();
                File.WriteAllLines(Environment.CurrentDirectory + @"\same.txt", logs.ToArray());
            }


sql语句长了些
 以上代码,我单独建的新程序跑起来是OK的,但是另外个大程序,虽然它代码量大,但我只是另外画一个Button然后点击事件里贴上面一模一样的代码,执行就是会报错
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-06502: PL/SQL: 数字或值错误 : character string buffer too small
 ORA-06512: 在 line 127
正常的返回下面的
584***2017/5/31 16:17:34
 756***2017/5/28 15:49:15
 490***2017/5/31 16:17:16
 584***2017/5/31 16:17:05
 584***2017/5/31 16:17:08
 460***2017/6/1 22:20:02
 457***2017/5/31 12:28:19
 493***2017/5/28 15:49:19
 447***2017/5/28 15:49:22
 433***2017/5/27 18:57:37
 721***2017/6/7 17:53:49
 553***2017/6/7 17:53:51
 (...........略过)

第一次接触数据库,求大大们解惑!有什么要我补充的就跟我提,谢谢!

补充,两个程序都是在同一台PC(Win7 64)上跑的,Oracle9i 64位客户端,程序都是X86 基于Net2.0,总之在我所知的配置里两个程序都是一样的
Debug Open方法还有条ServerVersion的报错 ServerVersion = 'conn.ServerVersion' threw an exception of type 'System.InvalidOperationException'

3个回答

︿ 1
sql语句我在Oracle SQL*Plus里跑了好多遍了,是没有问题的
我那个有问题的程序,去掉sql语句这一块,单纯的去建立一个连接对象然后打开,是有问题的,和语句无关
︿ 1
你报的就是SQL错误呀,我不知道你执行SQL的时候语句有没有变化,这个需要你自己看,检查下QUANTITY_PER_ASSEMBLY字段是否为NUMBER,如果存在字符串的数据,可能会报错
︿ 0
我执行你的SQL时,发现里面的空格和换行都有问题,我不知道你的SQL是从哪里复制过来的,建议先用SQL工具执行没问题后,再复制到程序代码中。