如何在Forms Developer 6i中修改日期输入格式为ddmmyy转dd-mm-yyyy
在Oracle Developer 6i中实现日期输入格式转换
以下是实现输入ddmmyy格式后自动转换为dd-mm-yyyy的具体操作步骤:
1. 设置日期项基础属性
- 打开表单设计器,选中目标日期输入项。
- 在Property Palette中:
- 若希望先接收纯数字输入,可将项的Data Type设为
VARCHAR2(长度设为10,对应最终的dd-mm-yyyy格式); - 若保持
DATE类型,暂时将Format Mask设为999999,允许输入6位数字。
- 若希望先接收纯数字输入,可将项的Data Type设为
2. 创建KEY-ENTER触发器
选中日期项,右键选择Triggers -> Create,选择KEY-ENTER触发器(对应按下回车键的动作),输入以下PL/SQL代码:
DECLARE v_input VARCHAR2(6); v_day VARCHAR2(2); v_month VARCHAR2(2); v_year VARCHAR2(4); v_date DATE; BEGIN v_input := TRIM(:你的块名.你的日期项名); -- 替换为实际的块名和项名 -- 验证输入为6位数字 IF LENGTH(v_input) != 6 OR NOT REGEXP_LIKE(v_input, '^[0-9]+$') THEN MESSAGE('请输入6位数字的日期(格式:ddmmyy)'); MESSAGE('请输入6位数字的日期(格式:ddmmyy)', 1); RAISE FORM_TRIGGER_FAILURE; END IF; -- 拆分日、月、年部分 v_day := SUBSTR(v_input, 1, 2); v_month := SUBSTR(v_input, 3, 2); -- 自动补全世纪:以50为分界,>50则为19xx,否则为20xx,可按需调整分界值 v_year := CASE WHEN SUBSTR(v_input, 5, 2) > '50' THEN '19' || SUBSTR(v_input, 5, 2) ELSE '20' || SUBSTR(v_input, 5, 2) END; -- 验证日期合法性,避免无效日期如31-02-2022 BEGIN v_date := TO_DATE(v_day || '-' || v_month || '-' || v_year, 'DD-MM-YYYY'); EXCEPTION WHEN VALUE_ERROR THEN MESSAGE('输入的日期无效,请检查日/月/年'); MESSAGE('输入的日期无效,请检查日/月/年', 1); RAISE FORM_TRIGGER_FAILURE; END; -- 赋值回项:若为VARCHAR2类型则格式化字符串,若为DATE类型直接赋值日期 :你的块名.你的日期项名 := TO_CHAR(v_date, 'DD-MM-YYYY'); -- 若为DATE类型,替换为::你的块名.你的日期项名 := v_date; END;
3. 调整显示格式(可选)
如果项是DATE类型,在Property Palette中将Format Mask设为DD-MM-YYYY,转换后会自动以该格式显示。
补充说明
- 若需要在项失去焦点时也触发转换,可添加
WHEN-VALIDATE-ITEM触发器,复用上述代码逻辑即可。 - 年份分界值可根据业务需求调整,比如改为30或其他数值。
内容的提问来源于stack exchange,提问作者Rizwan Ahmad
相关产品推荐
相关产品推荐

