【问题标题】:oracle out in procedureoracle out in procedure
【发布时间】:2015-07-03 13:45:55
【问题描述】:

我正在尝试创建以下过程

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"

【问题讨论】:

    标签: oracle plsql plsqldeveloper


    【解决方案1】:

    你只需要数一数,当 ph 定义为 varchar(11) 时,它的长度已经是 10 个字符了。

    在函数中再添加 3 个,所以 10 + 3 = 13

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

    如果初始字符串的长度为 10,则必须将 ph 定义为最小值 varchar(13)

    【讨论】:

    • 关闭,8006330575 的输出是 (800)633057-0575,即 16 个字符。
    猜你喜欢
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 2021-11-19
    • 2019-08-02
    • 1970-01-01
    • 2017-07-31
    相关资源
    最近更新 更多