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

ruarlubt  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(102)
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“未格式化”的like。这是一种正则表达式吗?它不能解析整个表达式,因为过程中p_phone_number的初始化限制?

oalqel3c

oalqel3c1#

代码完全按照你说的做了。在第二个代码块中,从p_phone_number的初始值中只取出三个字符。这三个字符以及前后括号在赋值时会 * 替换 * p_phone_number的原始内容。
要获得预期的结果,您需要使用用途:

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

相关问题