oracle 10g 常见问题

来源:互联网 发布:淘宝设置图盾 编辑:程序博客网 时间:2024/05/17 01:27

在oracle 过程中:
 
语句:
     SELECT nvl(FieldLongName,'') into TermFieldName FROM PUB_ReportDetail
     WHERE ReportName=ReportName and IsTermField is not null and IsTermField=1;
 
出现问题:ORA-01422: 实际返回的行数超出请求的行数
 

原因:select XXX into XXX?
      这样的用法每次必须只能返回一条记录,否则报too_many_rows错误
      如果没有找到记录就报no_data_found错误
 
解决办法一: 采用游标
 
 
   -----------------------------------------------------------------------------------------
   游标:type emp2_fieldlongname is ref cursor;---------------------
                                                ----自定义游标
          cur_fieldlongname emp2_fieldlongname;   ---------------------
          open cur_fieldlongname for SELECT nvl(FieldLongName,'')  FROM PUB_ReportDetail
          WHERE ReportName=ReportName and IsTermField is not null and IsTermField=1;
          fetch  cur_fieldlongname into TermFieldName;
          close cur_fieldlongname;
   -----------------------------------------------------------------------------------------
 
解决办法二:加 rownum=1 限制
  
   列:SELECT nvl(FieldLongName,'') into TermFieldName FROM PUB_ReportDetail
       WHERE ReportName=ReportName and IsTermField is not null and IsTermField=1 and rownum=1;
     -----------------------------------------------------------------------------------------
 
解决办法三:捕获too_many_rows的错误,然后进行处理


问题:ORA-00904:标识符无效
 
语句:select scm_s_bill.billdate,pub_c_function from scm_s_bill a,pub_c_function
 
原因:scm_s_bill.字段 没有与表的别名对应
解决办法: 字段中的表名称要跟表别名一一对应


问题:ORA-20000:buffer overflow,limit of 10000 bytes
 
原因:在过程中,dbms_output,用的次数过多。
解决办法:用了dbms_output,输出多了会抱错的,屏蔽掉就可以。
 

问题:ORA-00947:没有足够的值。
语句:INSERT INTO name20070414020721 (  DisplayPlag ,SCM_S_BILLBILLDATE,  SCM_S_BILLBILLCODE,  PUB_C_ProductCODE,  PUB_C_UNITNAME,  SCM_S_BILLDQTY,  SCM_S_BILLDPRICE,  hpje  )select  0, O.BILLDATE,O.BILLCODE,I.CODE,N.NAME,P.QTY,P.PRICE FROM PUB_C_AREA B, PUB_C_CTTYPE C, PUB_C_Customer D, PUB_C_DEPARTMENT E, PUB_C_GDTYPE F, PUB_C_PriceLevel H, PUB_C_Product I, PUB_C_ProductKIND J, PUB_C_REP L, PUB_C_SHIPVIA M, PUB_C_UNIT N, SCM_S_BILL O, SCM_S_BILLD P,PUB_USER W,PUB_USER A  WHERE O.repid = L.repid   and O.depid = E.id and O.termid = H.pricelevelid and O.shipviaid = M.shipviaid and O.customerid = D.customerid and D.cttypeid = C.cttypeid and D.areaid = B.areaid and P.productid = I.productid and I.gdtypeid = F.gdtypeid and I.kind = J.productkindid and I.unit = N.id and O.billid = P.billid and  O.canceled = 0 AND O.wdate = O.adate and O.wuserno=w.userid and O.auserno=a.userid and ((O.BILLDATE >= '05-10月-02'  and  O.BILLDATE <= '19-10月-02'))AND(I.NAME)=''  Order by B.NAME,C.NAME
原因:字段数量没有一致。
解决办法:字段数量一样。
 
ORA-01821:日期格式无法识别:
语句:strRand:=dbms_random.value(0,to_number(to_char(sysdate,'mm')) * 100000+to_number(to_char(sysdate,'ss')) * 1000 +to_number(to_char(sysdate,'md')) );
解决办法;暂时屏蔽调,有空在来解决。
 

问题:ORA-00902:无效数据类型
原因:类型不一致引起
解决办法:匹配类型
 

问题:ORA-00932:数据类型不一致,应为date,但却获得NUMBER
原因:类型不一致引起
解决办法:匹配类型
 

问题:ORA-01722:无效数字
语句:select nvl(TableName,' '),nvl(vsize(FieldName),' ') into strDbTableName,strColumn FROM PUB_FieldInfo Where FieldID=intFieldID;
原因:vsize()函数用法有错误
解决办法:修改语句为:select nvl(TableName,' '),vsize(nvl(FieldName,' ')) into strDbTableName,strColumn FROM PUB_FieldInfo Where FieldID=intFieldID;
 

问题:ORA-00972: 标识符过长
原因:
解决办法:


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zengwenyong1985/archive/2007/04/15/1565398.aspx