CREATE OR REPLACE FUNCTION createNewOrder(userID text,currency text,orderAmount integer,price integer,isSell boolean,fast boolean) RETURNS integer AS $$
DECLARE
asset record;
newBalance integer;
pairKey text;
begin SET TRANSACTION ISOLATION LEVEL REPEATABLE READ READ write;
--get user asset :
select into asset getUserAssetEntity(userID);
--check if asset not found :
if not found then
rollback;
return 101;
end if;
pairKey= asset.currency+"_payable" ;
--check if asset is enoughf :
if pairKey >= orderAmount then
--create order
insert into public.order (pair,amount,price,remain,cdate,sell,cancel,fast,traderid,isactive,status)
values (currency,orderAmount,price,orderAmount,NOW(),isSell,false,userID,true,"alive");
--calculate new Balance :
newBalance=asset.asset.pairKey - orderAmount;
--update user asset :
update public.asset set asset.pairKey = newBalance where id=asset.id;
commit;
return 103;
else
rollback;
return 102;
end if;
END; $$
LANGUAGE 'plpgsql';
Я попытался использовать уровень изоляции в своей функции, и он возвращает эту ошибку:
ошибка: УСТАНОВИТЬ УРОВЕНЬ ИЗОЛЯЦИИ должен быть вызван перед любым запросом