表table1中有个字段field1,类型是varchar2(32000)
存储的内容是aaa,bbb,ccc,ddd,eee 这样的数据(逗号分隔)
现在想要实现的功能是:
把aaa 、bbb、ccc、ddd随机顺序后仍旧用逗号分隔存到field2字段中如开始是aaa,bbb,ccc,ddd
存储后变成 ccc,bbb,ddd,aaa
或者 bbb,ddd,aaa,ccc 我在Collection Types里做了个定义
type Varchar20064 is table of varchar2(64)然后增加了一个函数(比较长,放在下面),测试时提醒这行有错误
大致意思应该是:没有创建该对象或者没有实例化就使用了请问如何解决这个问题,或者有没别的实现思路

解决方案 »

  1.   

    CREATE OR REPLACE FUNCTION SplitString(x in varchar2, separator in varchar2) 
    RETURN Varchar20064 IS   
             tmpString varchar2(32000);
    subString varchar2(64);
    tmpCurPlace number(18,0);
    tmpCounter number(18,0);
    tblString Varchar20064;
    BEGIN
        if (x is null) then
        return tblString;
    end if;

    tmpString := x;
    if (separator is null) then
        return tblString;
    end if;

    tmpCounter := 0;

        tmpCurPlace := instr(tmpString,separator);
    while (tmpCurPlace > 0)
    loop
        subString := substr(tmpString,1,tmpCurPlace-1);
        tblString(tmpCounter) := subString;  --出错的行
        tmpCounter := tmpCounter + 1;
    tmpString := substr(tmpString,tmpCurPlace + length(separator),length(tmpString));
    tmpCurPlace := instr(tmpString,separator);
    end loop;

    subString := tmpString;
    tblString(tmpCounter) := subString;

        return tblString;
    END SplitString;
    /
      

  2.   

    用存储过程,还不如用程序来实现随机你去SQLServer问,估计用存储过程实现的高手会很多。
    ============================================
    技术交流不该有界限 资源共享不该有条件
    http://blog.csdn.net/lovingkiss
    http://download.csdn.net/user/lovingkiss
    Email:loving-kiss@163.com
    本人说明:<我的帖子我做主>
    1、欢迎一切问题有关的交流——无论答案对错;
    2、不欢迎 顶、Mark、支持之类口水混分的人;
    我保留对非<散分贴>蹭分者的厌恶和鄙视...
    ============================================
      

  3.   

    对oracel不熟悉
    不过主要的东西 可以 读取出数据
    在如dataset中 进行随机排序后 
    写回field2更好吧
      

  4.   

    在程序中,不要用存储过程.那天让你移植到sqlserver,你就疯了
      

  5.   

    在  tblString(tmpCounter) := subString;  --出错的行    前面插入select tblString(tmpCounter) ;select subString  ;  看看哪个值有问题
      

  6.   

    oracle不熟悉,但是你应该可以单步骤调试下看看
      

  7.   

    对Oracle不熟, 看样子应该是自定义类型的问题, 可能需要初始化后才能使用
      

  8.   

    建议用Oracle的存储过程实现,可以减少数据交换量,
      

  9.   

    no oracle环境楼主现在让oracle做的事情并不是它擅长处理的东东
      

  10.   

    此贴面熟!用代码来实现算了!不过好象oracle的随机性强些
      

  11.   

    icefeiji(咖啡色的猪) ( ) 信誉:100    不懂别瞎说 oracle中有collection的处理方式 ,只不过我用的不熟练而已 看下面地址
    http://download-west.oracle.com/docs/cd/B19306_01/appdev.102/b14261/collections.htm#i20479在存储过程里实现,少两次远程交互,我的目的就是这个。放程序里实现还用跑来这里问?
      

  12.   

    tblString(tmpCounter) := subString;  --出错的行改成 
    tblString(tmpCounter - 1) := subString;
    就行了下标越界
      

  13.   

    Oracle只会写SP,和简单使用,只能帮你顶下