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

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

80
已采纳

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条回答

  • baidu_34024622 Mr.Guoguo 8月前

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

    点赞 评论 复制链接分享
  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 8月前

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

    点赞 1 评论 复制链接分享
  • jingluan666 jingluan666 8月前

    使用正则表达式判断:

     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

    点赞 评论 复制链接分享

为你推荐