编写无游标PL/SQL更新存储过程:格式化手机号并补默认区号
PL/SQL存储过程:按手机号长度添加分隔符并补充默认区号
我帮你优化了存储过程,完全满足不使用游标、按长度添加分隔符、无区号补默认值的要求,代码更易维护,逻辑也更清晰:
CREATE OR REPLACE PROCEDURE pro_update_judge_phone AS -- 定义默认区号常量,后续要修改区号直接改这里就行 c_default_area_code CONSTANT VARCHAR2(3) := '309'; BEGIN -- 场景1:10位完整手机号 → 格式化为 XXX-XXX-XXXX UPDATE judge SET phone# = SUBSTR(TRIM(phone#), 1, 3) || '-' || SUBSTR(TRIM(phone#), 4, 3) || '-' || SUBSTR(TRIM(phone#), 7, 4) WHERE LENGTH(TRIM(phone#)) = 10; -- 场景2:5位无区号本地号 → 补充默认区号并格式化为 XXX-XXXXX UPDATE judge SET phone# = c_default_area_code || '-' || TRIM(phone#) WHERE LENGTH(TRIM(phone#)) = 5; -- 若需要显式提交事务,可取消下面的注释 -- COMMIT; END; /
关键说明:
- 无游标实现:用两条
UPDATE语句批量处理,比游标效率高得多,适合批量更新场景。 - 按长度处理:严格根据手机号的修剪后长度来匹配规则,用
TRIM()避免前后空格干扰判断。 - 默认区号维护:把默认区号定义为常量
c_default_area_code,后续修改区号只需调整常量值,不用改动业务逻辑。 - 分隔符规则:
- 10位号码:按照3-3-4的常见手机号格式添加分隔符。
- 5位号码:补充默认区号后,用分隔符区分区号与本地号,完全符合“仅根据长度添加分隔符”的要求。
如果需要调整分隔符的格式(比如5位号要拆成XX-XXX),只需要修改对应UPDATE语句里的字符串拼接逻辑即可。
内容的提问来源于stack exchange,提问作者raju
相关产品推荐
相关产品推荐

