"CREATE OR REPLACE PROCEDURE P_TEST
AS
  CURSOR c_Cert IS SELECT ID,
      TO_CHAR(ADMEASUREDATE,'YYYY-MM-DD hh24:mi:ss') AS SADMEASUREDATE, 
      USEKIND, 
      USEAREA
      FROM T_AA@TO_SERVER 
      WHERE ROWNUM<10;
BEGIN
     FOR v_Cert IN c_Cert LOOP
         DBMS_OUTPUT.put_line('1');
   END LOOP; 
END P_TEST;"我在用存储过程和databaselink 把服务器中表的数据取出,客户端是oracle11g,服务器是10g,查询语句没问题,但执行存储过程出ORA-01406 异常 ,经排查发现字段 USEKIND  VARCHAR(6) 出 ORA-01406 异常  。 尝试把服务器改成oracle11g后,再执行了一次存储过程,又都ok,求解释

解决方案 »

  1.   

    字段长度的问题,查询结果的长度大于你定义的长度。另外,如一楼所说,不要使用varchar,建议使用varchar2。因为varchar是定长的,varchar2是变长的
      

  2.   

    你11g的服务器,可能是gbk的字符集,而你本机是utf8,建议把varchar6,改成varchar12。
      

  3.   

    不好意思,字段数据类型 是 varchar2(6),漏写了
      

  4.   

    建议把varchar2(6),改成varchar2(12)。