首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > PB >

PB调用plsql存储过程。报错!pl sql数字或值异常字符串缓冲区太小

2013-09-05 
PB调用plsql存储过程。报错!!pl sql数字或值错误字符串缓冲区太小目前自己写的pb程序都碰到这种问题,varcha

PB调用plsql存储过程。报错!!pl sql数字或值错误字符串缓冲区太小
目前自己写的pb程序都碰到这种问题,varchar2类型的变量,我都设置成4000size了,还是没解决。代码如下:
PROCEDURE

 function check_actionata(p_actionata defect.actionata%type,
                           p_actype    orders.actype%type,
                           p_return    out varchar2) return number is
    l_count number;
  begin
    if trim(p_actionata) is null then
      p_return := null;
      return 1;
    end if;
    if trim(p_actype) is null then
      select count(ata)
        into l_count
        from ata
       where trim(ata) = trim(p_actionata)
         and not_for_defect is null;
    else
      select count(ata)
        into l_count
        from ata
       where trim(actype) = trim(p_actype)
         and trim(ata) = trim(p_actionata)
         and not_for_defect is null;
    end if;
    if l_count = 0 then
      p_return := zh_pub_function.get_message('DEFECT', -7);
      return 0;
    end if;
    p_return := null;
    return 1;
  end check_actionata;

调用函数:
if dwo.name = 'ata' then
data = trim(data)
ls_actype = trim(ls_actype)
ls_return = trim(ls_return)
sqlca.check_actionata( data, ls_actype, ls_return)
messagebox('提示',sqlca.sqlerrtext)
if trim(ls_return) <>'' then
else
messagebox('提示',ls_return)
end if
end if

PL/SQL 存储 字符串缓冲区太小
[解决办法]
oracle 有测试功能,你用pl sql中的test测试,也会报错吗,99%是长度超了。
[解决办法]

引用:
Quote: 引用:

我是说你用程序跟出的传入参数值,在pl sql中测试,然后一步步跟,跟出存储中走到哪报的错。
这招早用过,plsql中是没问题的,pb中引用的时候才有问题。


看一下你的这句
sqlca.check_actionata( data, ls_actype, ls_return)

怀疑问题出在这里面了
[解决办法]
看一下sqlca.check_actionata( data, ls_actype, ls_return)这段代码,里面是怎么写的
[解决办法]
引用:
Quote: 引用:

看不出啥太大的问题,建议把存储过程改成程序中的方法,然后用debug调试一下。
其实这个方法也是试了,还是不行啊。pb新手,对这种问题完全误解啊。大神,求救~!

用debug调试问题出在哪一步?

热点排行