システムのスローダウンを解消するために改善しようとしている SQL がいくつかありますが、この質問のすべてのステートメントを追加するには多すぎます。
PL/SQL の一部には、 AND Not Exists句を含むAND Exists句があります。
これらの節には両方ともCaseステートメントが含まれています。case ステートメントのEnd部分の後に、 IS NOT NULLまたはIS NULLステートメントがあります。数年間 PL/SQL を使用してきましたが、この構文を見たのはこれが初めてであり、理解していないことを率直に認めます。AND Exists節全体を以下に示します。助けていただければ幸いです。
AND EXISTS (
SELECT Distinct PROJECTID
From Milestone_History MH,
Project_Milestone PM
Where MH.MilestoneId = PM.ID
AND MH.Projectid = PR.ID
AND ((UPPER(PM.Description) = 'FINAL BUILD INVOICE INSTRUCTIONS ISSUED') OR
(UPPER(PM.Description) = 'FEASIBILITY STUDY REQUIRED') OR
(UPPER(PM.Description) = 'PROJECT COMPLETE'))
AND (case when UPPER(PM.Description) = 'FEASIBILITY STUDY REQUIRED' then
Actual
End IS NOT NULL
AND
case
when UPPER(PM.Description) = 'PROJECT COMPLETE' then
MH.Actual
end IS NULL)
AND NOT EXISTS
(SELECT Distinct MH2.ProjectID
From Milestone_History MH2, Project_Milestone PM2
Where MH2.MilestoneId = PM2.ID
And MH2.ProjectID = MH.ProjectID
AND case
when UPPER(PM2.Description) = 'PROJECT COMPLETE' then -
MH2.Actual
end IS NOT NULL))