存储过程报错,ORA-01401: inserted value too large for column
问题是我存储过程是查询数据,不是insert的语句而是select语句报错,
存储过程如下
CREATE OR REPLACE PROCEDURE SP_BE_EX_ORDER_LIST_SEARCH(
   P_CURRENT_EXPO_ID NVARCHAR2 DEFAULT '%',
   P_ORDER_ID NVARCHAR2 DEFAULT '%',
   CS OUT SYS_REFCURSOR
   )
ISBEGINOPEN CS FOR SELECT
  A.ORDER_ID,
  A.ORDER_NUMBER,
  A.CREATE_TIME,
  A.IS_DEBT,
  A.ORDER_STATUS,
  A.AGENT_ID,
  A.AGENT_COMPANY_NAME,
  F.EXPO_AREA_CNNAME,
  A.SPACE_QUANTITY,
  A.SPACE_AREA,
  A.MAIN_CNPRODUCTS,
  A.MAIN_ENPRODUCTS,
  A.PRODUCT_CNBRAND,
  A.PRODUCT_ENBRAND,
  A.REMARKS,
  H.APPLY_PEOPLE_NAME,
  H.DISPLAY_NAME_CN,
  H.DISPLAY_NAME_EN,
  H.MOBILE,
  H.PHONE,
  H.EMAIL,
  H.FAX,
  H.COMPANY_CNNAME,
  H.COMPANY_ENNAME,
  H.IS_OVERSEAS,
  B.COUNTRY_CNNAME AS COUNTRY,
  G.CITY_NAME AS PROVINCE,
  I.CITY_NAME AS CITY,
  J.CITY_NAME AS AREA,
  H.CN_ADDRESS,
  H.EN_ADDRESS,
  H.POST_CODE,
  H.ID_CARD,
  C.COMPANY_NAME,
  A.RE_USE_NAME,
  A.RE_USE_TIME,
  FN_GETSPACE_NUMBER_BY_ORDER(A.CURRENT_EXPO_ID,A.ORDER_ID) AS EXPO_SPACE_NUMBERS,
  SUM(E.INLAND_FINAL_PRICE) AS SUMPRICE,
  SUM(E.OVERSEA_FINAL_P_USD) AS SUMPRICE_USD,
  SUM(E.OVERSEA_FINAL_P_EUR) AS SUMPRICE_EUR,
  A.DISCOUNT_RATE,
  SUM(E.INLAND_FINAL_PRICE)*A.DISCOUNT_RATE AS DISCOUNT_PRICE,
  SUM(E.OVERSEA_FINAL_P_USD)*A.DISCOUNT_RATE AS DISCOUNT_PRICE_USD,
  SUM(E.OVERSEA_FINAL_P_EUR)*A.DISCOUNT_RATE AS DISCOUNT_PRICE_EUR
FROM
  BE_EX_ORDER A
  LEFT JOIN BE_EX_AGENT C ON A.AGENT_ID=C.COMPANY_ID
  LEFT JOIN BE_EX_ORDER_SPACE_D D ON A.ORDER_ID=D.ORDER_ID
  LEFT JOIN BE_EX_EXPO_SPACE E ON D.EXPO_SPACE_ID=E.EXPO_SPACE_ID
  LEFT JOIN BE_EX_EXPO_AREA F ON A.EXPO_AREA_ID=F.EXPO_AREA_ID
  LEFT JOIN BE_EX_ORDER_HISTORY H ON A.ORDER_ID=H.ORDER_ID
  LEFT JOIN BE_SYS_COUNTRY B ON H.COUNTRY=B.COUNTRYID
  LEFT JOIN BE_SYS_CITY G ON H.PROVINCE=G.CITY_CODE
  LEFT JOIN BE_SYS_CITY I ON H.CITY=I.CITY_CODE
  LEFT JOIN BE_SYS_CITY J ON H.AREA=J.CITY_CODE
WHERE
  to_char(nvl(A.CURRENT_EXPO_ID,' ')) like '%'||to_char(P_CURRENT_EXPO_ID)||'%'
  AND 1=1
  AND to_char(nvl(A.ORDER_ID,' ')) like '%'||to_char(P_ORDER_ID)||'%'
GROUP BY
  A.ORDER_ID,
  A.ORDER_NUMBER,
  A.CREATE_TIME,
  A.IS_DEBT,
  A.AGENT_ID,
  A.AGENT_COMPANY_NAME,
  A.ORDER_STATUS,
  F.EXPO_AREA_CNNAME,
  A.SPACE_QUANTITY,
  A.SPACE_AREA,
  A.MAIN_CNPRODUCTS,
  A.MAIN_ENPRODUCTS,
  A.PRODUCT_CNBRAND,
  A.PRODUCT_ENBRAND,
  A.REMARKS,
  H.APPLY_PEOPLE_NAME,
  H.DISPLAY_NAME_CN,
  H.DISPLAY_NAME_EN,
  H.MOBILE,
  H.PHONE,
  H.EMAIL,
  H.FAX,
  H.COMPANY_CNNAME,
  H.COMPANY_ENNAME,
  H.IS_OVERSEAS,
  B.COUNTRY_CNNAME,
  G.CITY_NAME,
  I.CITY_NAME,
  J.CITY_NAME,
  H.CN_ADDRESS,
  H.EN_ADDRESS,
  H.POST_CODE,
  H.ID_CARD,
  C.COMPANY_NAME,
  A.RE_USE_NAME,
  A.RE_USE_TIME,
  A.DISCOUNT_RATE,
  A.CURRENT_EXPO_ID
;
END SP_BE_EX_ORDER_LIST_SEARCH;
当使用1次后,就会报错,但是在where中加个1=1的条件,就会正常,然后使用1次后又报错,再加多一个1=1又正常。。
求高手帮忙啊,完全不明白怎么搞

解决方案 »

  1.   

     FN_GETSPACE_NUMBER_BY_ORDER这个函数里面会不会有问题?
      

  2.   

    就是这存储过程可以用,但有时会报错ORA-01401: inserted value too large for column,然后在where里面加个1=1就可以正常用一段时间。。所以不明白什么问题,求救啊。
      

  3.   

    存储过程是可以用的,就是用着用着就会报ORA-01401: inserted value too large for column错,那函数应该是没问题的