CREATE OR REPLACE PROCEDURE format_phone_number
(p_phone_number IN OUT VARCHAR2)
IS
BEGIN
p_phone_number := '(' || SUBSTR(p_phone_number,1,3) || ')' ||
'-' || SUBSTR(p_phone_number,4,3) ||
'.' || SUBSTR(p_phone_number,7,4);
END format_phone_number;
-------------------------------------------------
DECLARE
v_number VARCHAR2(25) := '8002019201';
BEGIN
format_phone_number(v_number);
DBMS_OUTPUT.PUT_LINE(v_number);
END;
输出正常(800)-201.9201。问题是为什么我从这样的程序切割后例如:
CREATE OR REPLACE PROCEDURE format_phone_number
(p_phone_number IN OUT VARCHAR2)
IS
BEGIN
p_phone_number := '(' || SUBSTR(p_phone_number,1,3) || ')';
END format_phone_number;
再次调用后,它只给我这个(800)而不是(800)2019201“未格式化”。这是一种正则表达式,由于程序中p_phone_number中的初始化限制,它无法解析整个事物吗?
答案 0 :(得分:1)
代码完全按照你的要求去做。在第二个代码块中,只从p_phone_number
的初始值中取出三个字符。这三个字符以及前导和尾随括号,然后在进行赋值时替换 p_phone_number的原始内容。要获得结果,您需要使用:
p_phone_number := '(' || SUBSTR(p_phone_number,1,3) || ')' ||
SUBSTR(p_phone_number, 4, 7);
分享并享受。