Je suis un peu nouveau dans Oracle. J'essaie de créer un package qui a plusieurs fonctions. Voici le pseudocode de ce que je veux faire
function FunctionA(UserID, startdate, enddate)
/* Select TransactionDate, Amount
from TableA
where TransactionDate between startdate and enddate
and TableA.UserID = UserID */
Return TransactionDate, Amount
end FunctionA
function FunctionB(UserID, startdate, enddate)
/* Select TransactionDate, Amount
from TableB
where TransactionDate between startdate and enddate
and TableB.UserID = UserID */
Return TransactionDate, Amount
end FunctionA
TYPE TRANSACTION_REC IS RECORD(
TransactionDate DATE,
TransactionAmt NUMBER);
function MainFunction(startdate, enddate)
return TBL
is
vTrans TRANSACTION_REC;
begin
FOR rec IN
( Select UserID, UserName, UserStatus
from UserTable
where EntryDate between startdate and enddate )
LOOP
vTrans := FunctionA(rec.UserID, startdate, enddate)
if vTrans.TransactionDate is null then
vTrans := FunctionB(rec.UserID, startdate, enddate)
if vTrans.TransactionDate is null then
rec.UserStatus := 'Inactive'
endif;
endif;
END Loop;
PIPE ROW(USER_OBJ_TYPE(rec.UserID,
rec.UserName,
rec.UserStatus,
vTrans.TransactionDate,
vTtans.TransactionAmt));
end MainFunction
L'exécution de ce type de code prend beaucoup de temps parce que TableA et TableB sont des tables très grandes et que je n'obtiens qu'une entrée par enregistrement des tables.
Je voudrais créer une table temporaire (TempTableA, TempTableB) dans le package qui stockera temporairement tous les enregistrements basés sur la date de début et la date de fin, de sorte que lorsque j'essaierai de récupérer la date de transaction et le montant pour chaque enregistrement, je me référerai uniquement aux TempTables (qui sont plus petites que TableA et TableB).
Je veux également prendre en considération le fait que l'identifiant de l'utilisateur n'est pas trouvé dans TableA et TableB. Ainsi, lorsqu'aucun enregistrement n'est trouvé dans TableA et TableB, je veux également que l'entrée figure dans la sortie, mais il est indiqué que l'utilisateur est inactif.
Merci pour votre aide.