oralce字符窜转变为数组
来源:互联网 发布:意识与人工智能 编辑:程序博客网 时间:2024/05/26 12:59
CREATE OR REPLACE FUNCTION validate_zone_contain (zone_value VARCHAR2,zone1 VARCHAR2,delimiter varchar2)
RETURN BOOLEAN IS
v_flag BOOLEAN;
v_zone VARCHAR2(500);
v_zone1 VARCHAR2(500);
i NUMBER := 1;
c_i NUMBER := 1;
j NUMBER := 1;
k NUMBER := 1;
c_k NUMBER := 1;
h NUMBER := 1;
v_zone_value NUMBER;
v_zone_start NUMBER;
v_zone_end NUMBER;
BEGIN
-- 区域
v_zone := RTrim(LTrim(zone_value, delimiter), delimiter);
v_zone1 := RTrim(LTrim(zone1, delimiter), delimiter);
v_flag := TRUE;
LOOP
i := InStr(v_zone, delimiter, j);
c_i := InStr(v_zone, delimiter, j);
IF v_flag AND i> 0 THEN
v_zone_value := to_number(Trim(SubStr(v_zone, j, i-j)));
j := i+1;
LOOP
k := InStr(v_zone1, delimiter, h);
-- 多个值时 K > 0 (112,113)
IF k>0 THEN
v_zone_start := to_number(Trim(SubStr(v_zone1, h, k-h)));
v_zone_end := to_number(Trim(SubStr(v_zone1, h, k-h)))+100;
IF v_zone_value < v_zone_start OR v_zone_value > v_zone_end THEN
v_flag := FALSE;
END IF;
k := h+1;
ELSIF c_k >0 AND k = 0 THEN -- c_k 避免k遍历最后一个报错
v_zone_start := to_number(TRIM(v_zone1));
v_zone_end := v_zone_start+100;
IF v_zone_value < v_zone_start OR v_zone_value > v_zone_end THEN
v_flag := FALSE;
END IF;
END IF;
EXIT WHEN k=0;
END LOOP;
ELSIF v_flag AND c_i > 0 AND i= 0 THEN
v_zone_value := to_number(v_zone);
LOOP
k := InStr(v_zone1, delimiter, h);
IF k>0 THEN
v_zone_start := to_number(Trim(SubStr(v_zone1, h, k-h)));
v_zone_end := to_number(Trim(SubStr(v_zone1, h, k-h)))+100;
IF v_zone_value < v_zone_start OR v_zone_value > v_zone_end THEN
v_flag := FALSE;
END IF;
k := h+1;
ELSIF c_k >0 AND k = 0 THEN
v_zone_start := to_number(TRIM(v_zone1));
v_zone_end := v_zone_start+100;
IF v_zone_value < v_zone_start OR v_zone_value > v_zone_end THEN
v_flag := FALSE;
END IF;
END IF;
EXIT WHEN k=0;
END LOOP;
END IF;
EXIT WHEN i=0 OR v_flag = FALSE;
END LOOP;
RETURN v_flag;
END;
RETURN BOOLEAN IS
v_flag BOOLEAN;
v_zone VARCHAR2(500);
v_zone1 VARCHAR2(500);
i NUMBER := 1;
c_i NUMBER := 1;
j NUMBER := 1;
k NUMBER := 1;
c_k NUMBER := 1;
h NUMBER := 1;
v_zone_value NUMBER;
v_zone_start NUMBER;
v_zone_end NUMBER;
BEGIN
-- 区域
v_zone := RTrim(LTrim(zone_value, delimiter), delimiter);
v_zone1 := RTrim(LTrim(zone1, delimiter), delimiter);
v_flag := TRUE;
LOOP
i := InStr(v_zone, delimiter, j);
c_i := InStr(v_zone, delimiter, j);
IF v_flag AND i> 0 THEN
v_zone_value := to_number(Trim(SubStr(v_zone, j, i-j)));
j := i+1;
LOOP
k := InStr(v_zone1, delimiter, h);
-- 多个值时 K > 0 (112,113)
IF k>0 THEN
v_zone_start := to_number(Trim(SubStr(v_zone1, h, k-h)));
v_zone_end := to_number(Trim(SubStr(v_zone1, h, k-h)))+100;
IF v_zone_value < v_zone_start OR v_zone_value > v_zone_end THEN
v_flag := FALSE;
END IF;
k := h+1;
ELSIF c_k >0 AND k = 0 THEN -- c_k 避免k遍历最后一个报错
v_zone_start := to_number(TRIM(v_zone1));
v_zone_end := v_zone_start+100;
IF v_zone_value < v_zone_start OR v_zone_value > v_zone_end THEN
v_flag := FALSE;
END IF;
END IF;
EXIT WHEN k=0;
END LOOP;
ELSIF v_flag AND c_i > 0 AND i= 0 THEN
v_zone_value := to_number(v_zone);
LOOP
k := InStr(v_zone1, delimiter, h);
IF k>0 THEN
v_zone_start := to_number(Trim(SubStr(v_zone1, h, k-h)));
v_zone_end := to_number(Trim(SubStr(v_zone1, h, k-h)))+100;
IF v_zone_value < v_zone_start OR v_zone_value > v_zone_end THEN
v_flag := FALSE;
END IF;
k := h+1;
ELSIF c_k >0 AND k = 0 THEN
v_zone_start := to_number(TRIM(v_zone1));
v_zone_end := v_zone_start+100;
IF v_zone_value < v_zone_start OR v_zone_value > v_zone_end THEN
v_flag := FALSE;
END IF;
END IF;
EXIT WHEN k=0;
END LOOP;
END IF;
EXIT WHEN i=0 OR v_flag = FALSE;
END LOOP;
RETURN v_flag;
END;
阅读全文
0 0
- oralce字符窜转变为数组
- 后缀自动机 转变为 后缀数组
- oralce字符累加
- Oralce的转义字符
- 不可变数组转变为可变数组
- 科学计数的字符转变为数值
- 如何把void* 类型转变为二维数组
- oralce截取中文字符去掉特殊字符
- 将数组转变为list或者set方法之一
- oralce 列重命名添加特殊字符
- oralce正则表达式 替换非数字字符
- 字符窜数组指针 字符窜指针
- oralce
- oralce
- oralce
- oralce &
- 使用数组实现oralce批量数据提交
- 字符数组
- CSS初始之踩坑
- Jmeter安装教程+Jmeter快捷方式图标制作
- PXE+Kickstart无人值守安装
- 《阿里巴巴Java开发手册(正式版)》--MySQL规约
- C++ STL第三周笔记
- oralce字符窜转变为数组
- 垃圾回收的一点小知识
- 【中间件1】在Windows下搭建RocketMQ
- JVM- 类加载过程
- linux查看java jdk安装路径和设置环境变量
- Docker 简明笔记
- 阿里云短信服务
- 最大距离
- linux基本操作—vi编辑器