Добрый день, итак, сразу к делу.
Нужно переписать SQL функцию.
Что от неё требуется: она принимает параметр @in_CustomerID (CustomerID в таблице LoginID), он несёт в себе идентификатор пользователя до 32х цифр, в той же таблице LoginID есть поле GamePoints, по указателю CustomerID нужно найти баланс пользователя и вывести цифру в конечном итоге как GNABalance.
Ниже сбросил исходный вариант.
ALTER PROCEDURE [dbo].[WO_GNAGetBalance]
@in_CustomerID int
AS
BEGIN
SET NOCOUNT ON;
-- gna service id for warinc
declare @ServiceId bigint = 300005010000000000
get points for that customer
declare @CustomerID bigint
select @CustomerID=CustomerID from LoginID where CustomerID=@in_CustomerID
if (@@RowCount = 0) begin
select 6 as ResultCode, 'no CustomerID' as ResultMsg
return
end
declare @AuthId varchar(40)
set @AuthId = convert(varchar(32), @CustomerID)
-- get balance from gamenet
DECLARE @o_Balance money;
DECLARE @o_Error int;
SET @o_Balance = NULL;
SET @o_Error = NULL;
EXEC dblink_api.billing.dbo.usp_GetBalance
@i_ServiceId = @ServiceId,
@i_AuthType = 'user_id',
@i_AuthId = @AuthId,
@o_Balance = @o_Balance out,
@o_Error = @o_Error out;
if(@o_Error > 0) begin
select 6 as ResultCode, 'can not get balance' as ResultMsg
return
end
--convert NULL to 0
if(@o_Balance is NULL) set @o_Balance = 0
declare @Balance int = convert(int, @o_Balance)
select 0 as ResultCode
select @Balance as 'GNABalance'
create procedure [dbo].[WO_GNAGetBalance]
@in_CustomerID int
, @balance money output
, @result_code int output
, @result_msg varchar(255) output
as
begin
set nocount on
if not exists (select top 1 * from LoginID where CustomerID = @in_CustomerID)
begin
select @result_code = 6
, @result_msg = 'no CustomerID'
return 6
end
select @balance = sum(isnull(GamePoints, 0)) as GNABalance from LoginID
where CustomerID = @in_CustomerID;
if @@error != 0
begin
select @result_code = 7
, @result_msg = 'Error get balance'
return 7
end
select @result_code = 0
, @result_msg = 'Success!'
return 0
end