现在我有一个字段,如频率字段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;问一下各位大虾,问题到底出在哪里哇,急哇
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;问一下各位大虾,问题到底出在哪里哇,急哇
http://topic.csdn.net/u/20080721/12/c87d1a1d-b817-4de6-84ac-4f6ab56ef15a.html?seed=714459994#
函数里如果有INSERT、UpDATE、DELETE等语句
就不能直接调用了,需要像存储过程一样调用
是什么意思?你的返回值是'0'阿。
对oracle不熟悉,还望楼上2位多多指点
第二个在00,02,04,06,08
依次类推以第一条为例,把date中的小时是00 08 16的三个取出来
算了我给你写个插入到表中的过程。
假设a表为
00,08,16
00,02,04,06,08
00,10,20
插入到b表存储格式为:
00
08
16
00
..
这样的格式合要求吗