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参数,失败或者成功的原因提示放这个里面
------解决方案--------------------
up
------解决方案--------------------
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参数,失败或者成功的原因提示放这个里面
------解决方案--------------------
up
------解决方案--------------------