使用 oracle pl/sql 格式化 phone 数字时的误解

misunderstanding in formating a phone number using oracle pl/sql

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 "unformated" 之类的。这是一种正则表达式吗,由于程序 p_phone_number 中初始化的限制,它无法解析整个内容?

代码完全按照您的指示执行。在第二个代码块中,只有三个字符取自 p_phone_number 的初始值。这三个字符,加上前后括号,然后替换赋值时p_phone_number原来的内容。要获得您期望的结果,您需要使用:

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

分享和享受。