YONGREN12
2020-08-04 12:37
采纳率: 100%
浏览 116

PLSQL的IF文的问题,用IF文怎么写

PL/SQL的问题
参数是这样的。

CREATE OR REPLACE PROCEDURE  vs_five50(
    in_PLACE                 IN    NUMBER,        --处理对象
    in_DATE                 IN    VARCHAR2,      --年月 YYYYMM形式
    inGOODS_CD         IN    VARCHAR2,      --商品code
    inCUST_CD             IN    VARCHAR2       --顾客code
    )

        --我想用IF文,让发生分歧

        --如果处理对象or年月是null的话
        IF inPLACE IS NULL OR in_DATE IS NULL THEN

    --如果处理对象是1,2,3 以外的话
    ELSIF inPLACE NOT IN(1,2,3)  THEN

    --年月不是YYYYYMM型式,or最后两个数字不是”04””10”以外

ELSIF   --这里怎么写才好?

    END IF;
    END;/
如果会有PLSQL的人,能不能告诉我?
  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • Mr.Guoguo 2020-08-05 16:14
    已采纳

    再写一个函数来判断年月格式,直接用to_date(date,‘yyyyMM’)方法,能正常转返回一个值,异常捕获返回另一个值

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • jingluan666 2020-08-04 14:48

    使用正则表达式判断:

     IF NOT regexp_like(in_DATE,                             
        '^((((19|2\d)\d{2})(0?[13578]|1[02])(0?[1-9]|[12]\d|3[01]))|(((19|2\d)\d{2})(0?[469]|11)(0?[1-9]|[12]\d|30))|(((19|2\d)\d{2})0?2(0?[1-9]|1\d|2[0-8]))|((19([02468][048]|13579)[26]|2\d(0[48]|[13579][26]|[2468][048])|(2000))0?2(0?[1-9]|[12]\d)))$') THEN
    

    https://www.cnblogs.com/jinit/p/12454860.html

    评论
    解决 无用
    打赏 举报
  • threenewbee 2020-08-04 15:48

    看你要做什么
    一种是基于容错的考虑,当日期不完整的时候,比如缺少年,有月、日,那么给一个默认的年,凑齐一个日期
    一种是严格的考虑,如果不合法,就直接把字段设置为null

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题