现在我有一个字段,如频率字段freq,存放着
00,08,16
00,02,04,06,08
00,10,20
等等都是以逗号隔开的关于小时的字符串现在我要把这些小时全截取出来,和另一个date字段的HH24比较,我建了个函数fun_split,但因为我没有权限定义返回值的数组类型,但有建表的权限,我建了张表freq,把截出来的频率都插入到这张表里,但在执行to_char(date,'HH24') = fun_split(freq)的时候都会出错误,跳到了插入表的那条语句这个是我的函数
CREATE OR REPLACE FUNCTION FUN_Split( str_freq IN  VARCHAR2)
  RETURN   VARCHAR2
  IS
          v_intPos   INTEGER   :=0;
          v_str   VARCHAR2(100):=   str_freq;
          v_strSub   VARCHAR2(10);
  BEGIN
            v_intPos:=instr(v_str,',');
            WHILE   v_intpos > 0
            LOOP
                     v_strsub:=substr(v_str,1,v_intPos - 1);
                     INSERT   INTO   freq   执行程序出错,就跳到了这条
                     VALUES(v_strSub);
                     v_str:=substr(v_str,v_intpos + 1);
                     v_intPos:=instr(v_str,',');
                    IF   v_intpos   =   0   AND   v_str   is   not   null then
                             INSERT   INTO  freq
                             VALUES(v_strSub);
                     END   IF;
            END   LOOP;
  RETURN('0');
END   FUN_Split;问一下各位大虾,问题到底出在哪里哇,急哇

解决方案 »

  1.   

    拆分字段,可以参考此贴里的SQL
    http://topic.csdn.net/u/20080721/12/c87d1a1d-b817-4de6-84ac-4f6ab56ef15a.html?seed=714459994#
      

  2.   

    你存储过程中 freq没有定义
      

  3.   

    看错了,不是没有定义,是一张表
    函数里如果有INSERT、UpDATE、DELETE等语句
    就不能直接调用了,需要像存储过程一样调用
      

  4.   

    to_char(date,'HH24') = fun_split(freq)
    是什么意思?你的返回值是'0'阿。
      

  5.   

    不好意思啊,我的本意是想把date字段中的小时去和截取出来的那些频率进行关联啊
    对oracle不熟悉,还望楼上2位多多指点
      

  6.   

    我就是判断date中的第一个样品的分析频率在00,08,16
    第二个在00,02,04,06,08
    依次类推以第一条为例,把date中的小时是00 08 16的三个取出来
      

  7.   

    我的意思是怎么跟to_char(date,'HH24')关联,
    算了我给你写个插入到表中的过程。
    假设a表为
    00,08,16
    00,02,04,06,08
    00,10,20 
    插入到b表存储格式为:
    00
    08
    16
    00
    ..
    这样的格式合要求吗