使用 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);
分享和享受。
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);
分享和享受。