使用oracle pl / sql格式化电话号码时的误解

时间:2015-03-06 11:43:16

标签: oracle oracle11g oracle-sqldeveloper

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中的初始化限制,它无法解析整个事物吗?

1 个答案:

答案 0 :(得分:1)

代码完全按照你的要求去做。在第二个代码块中,只从p_phone_number的初始值中取出三个字符。这三个字符以及前导和尾随括号,然后在进行赋值时替换 p_phone_number的原始内容。要获得结果,您需要使用:

p_phone_number := '(' || SUBSTR(p_phone_number,1,3) ||  ')' ||
                  SUBSTR(p_phone_number, 4, 7);

分享并享受。