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的初始化限制?
1条答案
按热度按时间oalqel3c1#
代码完全按照你说的做了。在第二个代码块中,从
p_phone_number
的初始值中只取出三个字符。这三个字符以及前后括号在赋值时会 * 替换 * p_phone_number的原始内容。要获得预期的结果,您需要使用用途: