pl/sql 函数之判断多个分割的数字是否在某个范围
来源:互联网 发布:意识与人工智能 编辑:程序博客网 时间:2024/06/05 14:48
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
- pl/sql 函数之判断多个分割的数字是否在某个范围
- 判断某个值是否在某个范围汇编优化
- 在sql 数据库中,用脚来判断字符串是否为数字的函数
- PL/SQL之变量的作用范围
- Android 判断是否是数字及数字的范围
- 写个如何判断IP在某个IP范围的示例代码
- 判断数字里是否含有某个数字的事情
- 在oracle中判断某个字段的值是否为数字
- oracle的pl/sql存储过程调用java soure来判断文件夹下某个文件是否存在
- 判断某个字符是否为数字的简单方法
- MyBatis 判断传入的变量是否等于某个数字问题
- 在PL/SQL中怎样判断查询的结果是否为空
- 如何在PHP中判断某个函数是否被支持
- 判断某个东西是否在数组中的函数in_array
- vc 判断一个字符串是否位数字,且判断此数字的范围
- sqlserver判断是否为数字的函数
- sqlserver判断是否为数字的函数
- sqlserver 判断是否为数字的函数
- Get请求和POST请求的区别
- TensorFlow 卷积神经网络之猫狗识别
- javascript中forEach和map遍历数组
- java反射机制
- Linux Shall命令入门
- pl/sql 函数之判断多个分割的数字是否在某个范围
- java虚拟机之二虚拟机内存结构
- [LeetCode] Matrix 值修改系列,例题 Surrounded Regions,Set Matrix Zeroes
- 如何作为一个优秀的程序员
- 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.
- 【软考学习】设计模式——组合模式
- 习题3.1
- CentOS下安装JDK1.7
- CSS初始之踩坑