oracle在程序中

时间:2015-07-03 13:45:56

标签: oracle plsql plsqldeveloper

我正在尝试创建以下过程

create or replace procedure format_phone (ph in out varchar2) is 
begin
    ph:='('||substr(ph,1,3)||
        ')' || substr(ph,4,6)||
        '-'||substr(ph,7);
end;
/

declare 
    ph varchar2(11):='8006330575';
begin
    format_phone(ph);
end;
/

抛出此异常:

Error starting at line 1 in command:
declare 
    ph varchar2(11):='8006330575';
begin
    format_phone(ph);
end;

Error report:
ORA-06502: PL/SQL: خطأ رقمي أو قيمة: character string buffer too small
ORA-06512: عند "HR.FORMAT_PHONE", line 3
ORA-06512: عند line 4
06502. 00000 -  "PL/SQL: numeric or value error"

1 个答案:

答案 0 :(得分:1)

你只需要计算,当ph被定义为varchar(11)时,它已经具有10个字符的长度。

在你添加3个以上的函数中,所以10 + 3 = 13

13> 11 =>字符串缓冲区太小

如果初始字符串的长度为10

,则必须将ph定义为最小varchar(13)