sobota, 20 października 2018

Giełda - tworzenia zlecenia (transakcji) kupna


Procedura tworząca zlecenie (transakcje) kupna akcji
Parametry wejściowe
@user_id int,
@numberBuyStock int,
@stock_name varchar(10)

BEGIN
--pomocnicze
declare @wallet_id int
declare @stock_id int
declare @stockN_id int
declare @stockPrice money
declare @walletMoneyLimit money
--wyszukanie portfela oraz akcji
select @wallet_id = wal_id from UserTable where usr_id =@user_id
select @walletMoneyLimit = wal_MoneyLimit from Wallet where wal_id = @wallet_id
select @stockN_id = stockN_id from StockName where stockN_name = @stock_name
select @stock_id = stock_id, @stockPrice = stock_pricie from Stock where stockN_id = @stockN_id
-- sprawdzenie portfela
declare @result money
declare @PriceTransaction money
set @result = @numberBuyStock * @stockPrice
if(@result <= @walletMoneyLimit)
begin
--transakcja na rynek
INSERT INTO [dbo].[MarketSquare]
([stock_id],[wal_id],[mark_numberOfShares]
,[mark_aktywny],[mark_sharePriceBuy]
,[bs_id],[mark_sharePriceSell]
,[mark_dataStart],[mark_TransactionPrice])
VALUES
(@stock_id,@wallet_id,@numberBuyStock,1,@stockPrice,2,0,GETDATE(),@result)
--sciagniecie kasy z portfela i dopisanie do transakcji
set @PriceTransaction = @walletMoneyLimit - @result
update Wallet set
wal_MoneyLimit = @PriceTransaction
where
wal_id = @wallet_id

end
else
begin
print 'zamałe srodki na zakup akcji, zmniejsz liczbe akcji'
end

END

Wersja rozszerzona o ustawienie ceny akcji przez użytkownika, zamiast pobrania ceny z tabeli Stock oraz zastosowanie procedury piszącej do tabeli log, dodatkowo ustalenie daty ważności zlecenia.

Parametry wejściowe:
@user_id  int,
@numberBuyStock int,
@stock_name varchar(10),
@priceStatusId int,
@stockPrice money,
@dataEnd datetime
)
AS
BEGIN
--pomocnicze
declare @wallet_id int
declare @stock_id int
declare @stockN_id int
declare @walletMoneyLimit money
declare @userLogin varchar(50)
--wyszukanie portfela oraz akcji
select @wallet_id = wal_id from UserTable where usr_id =@user_id
select @walletMoneyLimit = wal_MoneyLimit from Wallet where wal_id = @wallet_id
select @stockN_id = stockN_id from StockName where stockN_name = @stock_name
select @stock_id = stock_id from Stock where stockN_id = @stockN_id
-- sprawdzenie portfela
declare @result money
declare @PriceTransaction money
set @result = @numberBuyStock * @stockPrice
if(@result <= @walletMoneyLimit)
begin
--transakcja na rynek
       INSERT INTO [dbo].[MarketSquare]
           ([stock_id],[wal_id],[mark_numberOfShares]
           ,[mark_aktywny],[mark_sharePriceBuy]
           ,[bs_id],[mark_sharePriceSell]
           ,[mark_dataStart],[mark_dataEnd],[mark_TransactionPrice],[priceStatus_id])
     VALUES
           (@stock_id,@wallet_id,@numberBuyStock,1,@stockPrice,2,0,GETDATE(),@dataEnd,@result,@priceStatusId)
--sciagniecie kasy z portfela i dopisanie do transakcji
       set @PriceTransaction = @walletMoneyLimit - @result
       update Wallet set
             wal_MoneyLimit = @PriceTransaction
       where
             wal_id = @wallet_id

end
else
begin
       select @userLogin = usr_login from UserTable where usr_id = @user_id
       exec pAddInfoToLog 2,@userLogin,'zamałe srodki na zakup akcji, zmniejsz liczbe akcji'
end

END

Brak komentarzy:

Prześlij komentarz

 Po wielu miesiącach przerwy Czteroletnim exodusie do bloga ismartdev, który zdechł w zeszłym roku w listopadzie, na powrót wstąpiłem w ten ...