在c#中如何向oracle传递大于32767的字符串?多谢指点!

解决方案 »

  1.   

    varchar2的长度限制是4000。可以考虑用可变数组。
      

  2.   

    用 CLOB 类型的字段来存储大于 4000 字节的字符串数据。
      

  3.   

    多谢 飞不起来的笨鸟指点,我试过CLOB,但只能接收小于32767的字符串。
      

  4.   

    clob可以存最大8T的字节。你如果不能存,肯定是你使用方法错了。
      

  5.   

    我知道mssql里有nvarchar(max)类型
      

  6.   

    学习甲骨文,你好,多谢!你说:clob可以存最大8T的字节。你如果不能存,肯定是你使用方法错了。
    也学是我的方法不对,麻烦你帮我看一下如何改进:
    1、在oracle中有一个procedure:
       PROCEDURE GET_MSG (
          RECEIVED_MSG   IN       CLOB
       )
       IS
          INSERT_STR       VARCHAR2 (32767) := '';
          LOB_LEN          NUMBER;
          CUR_LOB_LEN      NUMBER;
          V_POS            NUMBER           := 1;
          J                INTEGER;
          J_LOOP           INTEGER;      BEGIN
         
          LOB_LEN := DBMS_LOB.GETLENGTH (RECEIVED_MSG);
          J := CEIL (LOB_LEN / 32767);      FOR J_LOOP IN 1 .. J
          LOOP
             CUR_LOB_LEN := LOB_LEN - (J - 1) * 32767;
             V_POS := V_POS + (J_LOOP - 1) * 32767;
             DBMS_LOB.READ (RECEIVED_MSG, CUR_LOB_LEN, V_POS, INSERT_STR);
              
          END LOOP;
         end;
    2、在c#中定义一个string类型的变量,直接将该变量的值传递给RECEIVED_MSG ,当c#中的string变量超过32513时,就会报错:
    ORA-01460: 转换请求无法实现或不合理\n
      我好晕啊,不知道32513到底代表什么,只要超过32513就抱错,指点指点我吧,快两天啦,没有一点进展。
      

  7.   

    别的不说,你这个过程里:
     INSERT_STR      VARCHAR2 (32767) := ''; 
    这个就错了。varchar2最大长度4000byte
      

  8.   

    INSERT_STR      VARCHAR2 (32767) := ''; 
    应该不错,varchar2最大长度4000byte是指表中的字段,变量最大是32768,即32k。
      

  9.   

    恩。varchar2字段和变量最大长度不同。还没注意过这个问题。
    你这样试试,别的都不改,把RECEIVED_MSG这个传入参数的类型改为clob试试,不用varchar2。
      

  10.   

    应该不行,你就别等啦,没答案的。
    因为dbm_lob只能处理小于32k字符,你只好用两个clob接收大于32k的字符串,然后分别处理。