存储过程在PB中无法正常执行?(SQL SERVER + PB10)

okflight 2005-10-11 01:48:53
存储过程在查询分析器中执行正常,在PB中只执行一半
存储过程如下:
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'sp_Get_PLNo' AND type = 'P')
DROP PROCEDURE sp_Get_PLNo
GO

CREATE PROCEDURE sp_Get_PLNo @Country_Code Char(2), @PLNo Char(11) OUTPUT
as
BEGIN transaction tranpl
Declare @CurrentDate Datetime;
Declare @CurrentYear Char(2);
Declare @Increment int, @Next_No Varchar(7), @Next_No_New Varchar(7)

BEGIN
Select @CurrentDate = Getdate();
Select @CurrentYear = Right(Cast(Year(@CurrentDate) As Char(4)),2);

Select @Increment = Increment, @Next_No = Ltrim(Rtrim(next_no)) From RN_M
Where Country_Code = @Country_Code And prefix_type = 'PL'

Select @Next_No_New = Ltrim(Rtrim(Right('000000' + Cast((Cast(@Next_No As int) + @Increment) As Varchar(7)), 7)))
Update RN_M Set next_no = @Next_No_New
Where Country_Code = @Country_Code And prefix_type = 'PL'
If @@Error <> 0
Begin
Select @PLNo = 'Error'
Return
End

Select @PLNo = 'PL' + @CurrentYear + @Next_No
END
--END
commit transaction tranpl

功能是取一个流水号,然后把当前号码加1再保存到数据库

PB调用代码如下:
declare proc_sp_Get_PLNo procedure for sp_Get_PLNo
@Country_Code = :gs_country_code,
@PLNo = :ls_pl_no OUTPUT
using sqlca2;
execute proc_sp_Get_PLNo;

if sqlca2.sqlcode < 0 then
ls_err = sqlca2.sqlerrtext
messagebox(f_getmsgtext('DlgInfTitle'), ls_err)
return -1
end if
fetch proc_sp_Get_PLNo into :ls_pl_no;
close proc_sp_Get_PLNo;
Rollback Using SQLCA2;

问题是在查询分析器中执行一切正常,但在PB调用时只能取到流水号,但没有Update数据库,导致每次取到的号码都是一样的。
请问各位大虾问题出在哪里?
...全文
209 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
okflight 2005-10-12
  • 打赏
  • 举报
回复
赋初值不行,仍然是只得到第一个字符
lzheng2001 2005-10-12
  • 打赏
  • 举报
回复
定义变量时赋初值就可以了 如:string ls_1 = space(100)
okflight 2005-10-11
  • 打赏
  • 举报
回复
改成commit using sqlca2;好像可以了

哪位还能帮我解决一下transaction调用的问题吗?
okflight 2005-10-11
  • 打赏
  • 举报
回复
我也试过用transaction调用,但结果更糟,只返回第一个字符:(
函数定义如下:
function long sp_Get_PLNo(string Country_Code,ref string PLNo) RPCFUNC ALIAS FOR "dbo.sp_Get_PLNo"

调用如下:
sqlca2.sp_get_plno( gs_country_code, ls_pl_no)
annyzgf 2005-10-11
  • 打赏
  • 举报
回复
应该是
commit using sqlca2;
lzheng2001 2005-10-11
  • 打赏
  • 举报
回复
一般要运行带output参数的存储过程,用以下方法
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=208355

1,078

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧