You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写无游标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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:51:30