PB应该怎样判断调用的存储过程是否成功呢,该怎么处理

PB应该怎样判断调用的存储过程是否成功呢
PB应该怎样判断调用的存储过程是否成功呢?

declare aaa procedure for pro_aaa ;
execute pro_aaa ;
if sqlca.sqlcode <> 0  then
   gf_xftclog(as_fwy.fwy,af_getdate(),'费用生成失败'+sqlca.sqlerrtext)
   return false
end if

1.以上书写是否正确?
2.sqlcode<>0表示什么呢?  是调用失败?还是存储过程中SQL执行失败?
3.如果以上书写正确,那么为什么sqlerrtext是空的呢
4.如果以上书写错误,那么应该怎样写呢?

请大家帮忙!
------解决方案--------------------
declare aaa procedure for pro_aaa ;
execute pro_aaa ;
if sqlca.sqlcode <> 0 then
  gf_xftclog(as_fwy.fwy,af_getdate(),'费用生成失败'+sqlca.sqlerrtext)
  return false
end if

1.以上书写是否正确? 
2.sqlcode<>0表示什么呢? 是调用失败?还是存储过程中SQL执行失败?
3.如果以上书写正确,那么为什么sqlerrtext是空的呢
4.如果以上书写错误,那么应该怎样写呢?
--------------
1,正确不正确需要编译看了
2,是调用 即过程执行是否成功
3,sqlerrtext是不是空,和COMMIT、ROLLBACK有关,也和错误代码有关
4,个人认为过程不该这么写,过程内部同样应该定义返回值,通过返回值确定成功与否
如:create or replace procedure jfgz( prm_sjgz in number,
                                  prm_zglb in varchar2,
                                  prm_gzqynd in varchar2,
                                  prm_retncode out number, 
                                  prm_retntxt  out varchar2)
5,其他同仁补充.
------解决方案--------------------
CREATE procedure [dbo].[yourprocname]
( @sError    varchar(255) output)
as

insert into ...


if @@error <> 0
   begin
    rollback
    select @sError = '插入...时错误'
    raiserror(@sError,16,1)
    return -1
   end

end

----------------

PB里面调用

----------------
DECLARE yourname PROCEDURE FOR yourprocname

@serror = :ls_err output;

EXECUTE yourname ;


if isnull(ls_err) or trim(ls_err) = '' then 
COMMIT;
else
rollback;
messagebox('',ls_err)
return
end if

------解决方案--------------------
PB中调用存储过程完整编程2008-04-27 16:36PB中调用存储过程完整编程 
String   ls_Proc
Long   ll_Count,ll_flag
String   ls_Id
String   ls_return
ls_Proc = 'USP_PROC'
SELECT Count(*) INTO :ll_count from sysobjects where name = :ls_Proc and xtype = 'P';
If ll_Count <= 0 Then
   messagebox("错误",'错误信息:存储过程' + ls_Proc + '不存在!')
   Return -1
End If
  
DECLARE Emp_proc1 procedure for USP_PROC
@Shop_ID = :ls_Id,@return_id = :ls_return OUTPUT;
EXECUTE Emp_proc1 into :ls_return;
    
If Sqlca.Sqlcode < 0 Then
   messagebox("错误","错误信息:" + Sqlca.SqlErrText)
   Close Emp_proc1 ;
   return -1else
   fetch Emp_proc into :ls_return;
   if ll_flag <> 0 then
    //messagebox("提示信息",ls_return)
    close Emp_proc ;
    return -1
   End if 
End If
close Emp_proc1 ; 

------解决方案--------------------
Sqlca.Sqlcode 只有3个取值 

Value Meaning
0 Success.
100 Fetched row not found.
-1 Error; the statement failed. Use SQLErrText or SQLDBCode to obtain the detail.

------解决方案--------------------
5楼说的再清楚不过了
------解决方案--------------------
无参数、无返回值、无返回记录集的调用,LZ的代码应该就可以,不过存储过程执行出错的原因是获取不了的,建议你修改下存储过程,带一个output参数,失败或者成功的原因提示放这个里面
------解决方案--------------------
引用:
PB中调用存储过程完整编程2008-04-27 16:36PB中调用存储过程完整编程 
String ls_Proc
Long ll_Count,ll_flag
String ls_Id
String ls_return
ls_Proc = 'USP_PROC'
SELECT Count(*) INTO :ll_count from sysobjects where name = :l……

up
------解决方案--------------------
引用:
PB中调用存储过程完整编程2008-04-27 16:36PB中调用存储过程完整编程 
String ls_Proc