oracle如何判断奇数偶数_检查字段是否为连续、跨段、连续的奇数列或偶数列

oracle 自定义函数 检查字段是否为连续、跨段、连续的奇数列或偶数列

--示例:Str(1,2,3,5,6,7), 返回Result(1-3周,5-7周);

-- Str(1,3,5,7), 返回Result(1-7单周);

-- Str(2,4,6,8), 返回Result(2-8双周);

-- 其他返回Result(Str);

`

CREATE OR REPLACE FUNCTION "CHECKNUMSEQ1"(str IN VARCHAR2) RETURN VARCHAR2 IS

p_num NUMBER DEFAULT 0; --计数器

p_cnt NUMBER DEFAULT 1; --循环游标时的标识,相当于数组下标

p_firstr VARCHAR2(5); --循环游标时保存第一行的值

p_prer VARCHAR2(5); --循环游标时保存前一行的值

p_result VARCHAR2(300);

BEGIN

SELECT COUNT(1) INTO p_num FROM TABLE(strsplitretarr(str, ','));

IF p_num > 1 THEN

FOR x IN (SELECT column_value AS v_num FROM TABLE(strsplitretarr(str, ',')) ORDER BY to_number(column_value)) LOOP

--获得第一行

IF p_cnt = 1 THEN

p_firstr := x.v_num;

END IF;

--如果后一个数字减去前一个数字不等于1 ,就是不连续区域

IF p_cnt > 1 AND to_number(x.v_num - p_prer) <> 1 THEN

IF p_firstr = p_prer THEN

p_result := p_result || p_firstr || ';';

ELSE

p_result := p_result || p_firstr || '-' || p_prer || ';';

END IF;

p_firstr := x.v_num;

END IF;

--获得最后一行

IF p_cnt = p_num THEN

IF to_number(x.v_num - p_prer) = 1 THEN

p_result := p_result || p_firstr || '-' || x.v_num || ';';

END IF;

IF to_number(x.v_num - p_prer) <> 1 THEN

IF p_firstr = p_prer THEN

p_result := p_result || p_firstr || ';' || x.v_num || ';';

ELSE

p_result := p_result || x.v_num || ';';

END IF;

END IF;

END IF;

p_cnt := p_cnt + 1;

p_prer := x.v_num;

END LOOP;

SELECT rtrim(p_result, ';') INTO p_result FROM dual;

ELSE

p_result := str;

END IF;

--检测是否为奇数列或偶数列

SELECT oddoreven(p_result) INTO p_result FROM dual;

RETURN(p_result);

EXCEPTION

WHEN OTHERS THEN

dbms_output.put_line(':程序运行出现内部错误,请联系管理员。' || dbms_utility.format_error_backtrace() || SQLCODE ||

'---' || SQLERRM);

END checknumseq1;

`

非常感谢某个同事的贡献

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值