oracle out in procedure

Posted

技术标签:

【中文标题】oracle 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"

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

关闭,8006330575 的输出是 (800)633057-0575,即 16 个字符。

以上是关于oracle out in procedure的主要内容,如果未能解决你的问题,请参考以下文章

Oracle中“IN”和“IN OUT”CURSOR参数的区别

oracle out in procedure

Oracle 存储过程问题 - IN 和 OUT 变量是无效标识符 [关闭]

索引处缺少 IN 或 OUT 参数:: Java、Oracle 中的 1 个错误

使用两个过程用 OUT 和 IN 参数进行简单计算,PL/SQL Oracle

oracle存储过程,IN OUT 类型的参数怎么传参数