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的人,能不能告诉我?
再写一个函数来判断年月格式,直接用to_date(date,‘yyyyMM’)方法,能正常转返回一个值,异常捕获返回另一个值
使用正则表达式判断:
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
看你要做什么
一种是基于容错的考虑,当日期不完整的时候,比如缺少年,有月、日,那么给一个默认的年,凑齐一个日期
一种是严格的考虑,如果不合法,就直接把字段设置为null