Oracle HCM Cloud Sql İle Yıllık İzin Mütabakat Formu Sorgususu Yazma

Kaan Can Calkan
8 min readJan 1, 2024

Hak Edişler İçin Accrual tablosundan ANC_PER_ACRL_ENTRY_DTLS tablosundan hesaplanır .

Type ‘FLDR’ Olan kayıtlar seçilir.

Hak edişler için Accrual tablosundaki PER_PLAN_ENT_ID ile ANC_PER_PLAN_ENROLLMENT tablosundaki

Enrollment tablosuna status eklenir.

PER_PLAN_ENT_ID bağlanır.

Yıllık izin Planın için ANC_ABSENCE_PLANS_F_TL Tablosu kullanılır.

Buradaki PL_ID ile Accrual tablosundaki Absence Plan Id bağlanır.

TL çeviri tablosu için Language alanını TR seçtim.

TL.Name kısmını kullanacağımız plan olan Yıllık İzin Planı yaptık.

Valuesı 0 geleen verilerin gelmemesini sağladık.

SELECT TL.NAME IZIN_PLANI, DTL.VALUE DURATION, DTL.PROCD_DATE,
DTL.TYPE
FROM ANC_PER_ACRL_ENTRY_DTLS DTL,

ANC_PER_PLAN_ENROLLMENT ENR,
ANC_ABSENCE_PLANS_F_TL TL
WHERE
1=1
AND DTL.TYPE= 'FLDR'

AND DTL.PER_PLAN_ENRT_ID = ENR.PER_PLAN_ENRT_ID
AND TRUNC (SYSDATE) BETWEEN ENR.ENRT_ST_DT AND ENR.ENRT_END_DT AND ENR.STATUS = 'A'
AND DTL.PL_ID = TL.ABSENCE_PLAN_ID
AND TL.LANGUAGE='TR'
AND TRUNC (SYSDATE) BETWEEN TL.EFFECTIVE_START_DATE
AND TL.EFFECTIVE_END_DATE
AND DTL.PERSON_ID = 300000436489700
AND TL.NAME = 'Yıllık İzin Planı'
AND DTL.VALUE <> 0

Ardından Bu yazdığımız sorguyu iç select haline getirip Froma yazıyoruz. Per_All_People_F ve Per_All_Assigment tablolarınını ekliyoruz.

Per_All_People_F İle Assgiment Idyi bağlıyıp,

Assigment Id ile de yazdığımız iç selectdeki assigment_ıdyi bağlıyoruz.

Geçerlilik tarihleri koşullarını girdikten sonra

Assigment Type , Assigment Primary Flag ve Assigment Status type koşullarını standarttaki şekliyle sorguya ekliyoruz.

SELECT PP.PERSON_ID,
A.DURATION, A.PROCD_DATE
FROM PER_ALL_PEOPLE_F PP,
PER_ALL_ASSIGNMENTS_M ASG,
(SELECT TL.NAME IZIN_PLANI,
DTL.VALUE DURATION,
DTL.PROCD_DATE,
DTL.TYPE,
DTL.PERSON_ID,
DTL.ASSIGNMENT_ID
FROM ANC_PER_ACRL_ENTRY_DTLS DTL,
ANC_PER_PLAN_ENROLLMENT ENR,
ANC_ABSENCE_PLANS_F_TL TL
WHERE 1 = 1
AND DTL.TYPE = 'FLDR'
AND DTL.PER_PLAN_ENRT_ID = ENR.PER_PLAN_ENRT_ID
AND TRUNC (SYSDATE) BETWEEN ENR.ENRT_ST_DT AND ENR.ENRT_END_DT
AND ENR.STATUS = 'A'
AND DTL.PL_ID = TL.ABSENCE_PLAN_ID
AND TL.LANGUAGE = 'TR'
AND TRUNC (SYSDATE) BETWEEN TL.EFFECTIVE_START_DATE
AND TL.EFFECTIVE_END_DATE
AND DTL.PERSON_ID = 300000436489700
AND TL.NAME = 'Yıllık İzin Planı'
AND DTL.VALUE <> 0) A
WHERE TRUNC (SYSDATE) BETWEEN PP.EFFECTIVE_START_DATE
AND PP.EFFECTIVE_END_DATE
AND PP.PERSON_ID = ASG.PERSON_ID
AND TRUNC (SYSDATE) BETWEEN ASG.EFFECTIVE_START_DATE
AND ASG.EFFECTIVE_END_DATE
AND ASG.ASSIGNMENT_TYPE IN ('E', 'C')
AND ASG.ASSIGNMENT_STATUS_TYPE = 'ACTIVE'
AND ASG.PRIMARY_FLAG = 'Y'
AND A.ASSIGNMENT_ID = ASG.ASSIGNMENT_ID

Ardından daha önceden yazmış olduğum personel verilerini içeren sorguyu ayrı bir data model olarak ekliyorum.

SELECT PAPF.PERSON_NUMBER,
PAPF.PERSON_ID,
UPPER (PPN.FIRST_NAME) || ' ' || UPPER (PPN.LAST_NAME)
AS PERSONNAME,
HAPTL.NAME
AS POSITION,
HOUFL.NAME
AS DEPARTMAN,
PJFL.NAME AS GOREV,
TO_CHAR (PPOS.DATE_START, 'dd.mm.yyyy')
AS START_DATE,
TO_CHAR( PAAM.ASS_ATTRIBUTE_DATE2,'dd.mm.yyyy')
AS IZIN_BASLANGIC_TARIHI,

(SELECT (UPPER (PPN2.FIRST_NAME) || ' ' || UPPER (PPN2.LAST_NAME))
FROM PER_ASSIGNMENT_SUPERVISORS_F PASF, PER_PERSON_NAMES_F PPN2
WHERE TRUNC (SYSDATE) BETWEEN PASF.EFFECTIVE_START_DATE
AND PASF.EFFECTIVE_END_DATE
AND TRUNC (SYSDATE) BETWEEN PPN2.EFFECTIVE_START_DATE
AND PPN2.EFFECTIVE_END_DATE
AND PASF.ASSIGNMENT_ID = PAAM.ASSIGNMENT_ID
AND PPN2.NAME_TYPE = 'GLOBAL'
AND PASF.MANAGER_ID = PPN2.PERSON_ID
AND PASF.PRIMARY_FLAG = 'Y'
AND PASF.MANAGER_TYPE = 'LINE_MANAGER') LINE_MANAGER_PERSON_ID

FROM PER_ALL_PEOPLE_F PAPF,
PER_ALL_ASSIGNMENTS_M PAAM,
PER_PERSON_NAMES_F PPN,
HR_ALL_POSITIONS_F HAPF,
HR_ALL_POSITIONS_F_TL HAPTL,
PER_JOBS_F PJF,
PER_JOBS_F_TL PJFL,
HR_ORGANIZATION_UNITS HOU,
HR_ORG_UNIT_CLASSIFICATIONS_F HOUCF,
HR_ORGANIZATION_UNITS_F_TL HOUFL,
(SELECT *
FROM PER_PERIODS_OF_SERVICE Z
WHERE Z.PRIMARY_FLAG = 'Y'
AND Z.PERIOD_OF_SERVICE_ID =
(SELECT MAX (X.PERIOD_OF_SERVICE_ID)
FROM PER_PERIODS_OF_SERVICE X
WHERE X.PRIMARY_FLAG = 'Y' AND Z.PERSON_ID = X.PERSON_ID))
PPOS
WHERE TRUNC (SYSDATE) BETWEEN PAPF.EFFECTIVE_START_DATE
AND PAPF.EFFECTIVE_END_DATE
AND TRUNC (SYSDATE) BETWEEN PAAM.EFFECTIVE_START_DATE
AND PAAM.EFFECTIVE_END_DATE
AND TRUNC (SYSDATE) BETWEEN HOUCF.EFFECTIVE_START_DATE
AND HOUCF.EFFECTIVE_END_DATE
AND TRUNC (SYSDATE) BETWEEN HOUFL.EFFECTIVE_START_DATE
AND HOUFL.EFFECTIVE_END_DATE
AND TRUNC (SYSDATE) BETWEEN HAPF.EFFECTIVE_START_DATE
AND HAPF.EFFECTIVE_END_DATE
AND TRUNC (SYSDATE) BETWEEN HAPTL.EFFECTIVE_START_DATE
AND HAPTL.EFFECTIVE_END_DATE
AND TRUNC (SYSDATE) BETWEEN PPN.EFFECTIVE_START_DATE
AND PPN.EFFECTIVE_END_DATE
AND PAPF.PERSON_ID = PPN.PERSON_ID
AND PPN.NAME_TYPE = 'GLOBAL'
AND PAAM.POSITION_ID = HAPF.POSITION_ID
AND PAAM.JOB_ID = PJF.JOB_ID
AND PJF.JOB_ID = PJFL.JOB_ID
AND PAAM.ASSIGNMENT_TYPE IN ('E', 'C')
AND PAAM.ASSIGNMENT_STATUS_TYPE = 'ACTIVE'
AND HAPTL.LANGUAGE = 'US'
AND HAPF.POSITION_ID = HAPTL.POSITION_ID
AND PJFL.LANGUAGE = 'US'
AND HOUCF.ORGANIZATION_ID = HOU.ORGANIZATION_ID
AND HOUCF.ORGANIZATION_ID = HOUFL.ORGANIZATION_ID
AND HOU.ORGANIZATION_ID = PAAM.ORGANIZATION_ID
AND HOUFL.LANGUAGE = 'US'
AND PAAM.PERSON_ID = PAPF.PERSON_ID
AND PAAM.PERIOD_OF_SERVICE_ID = PPOS.PERIOD_OF_SERVICE_ID
AND PPOS.PRIMARY_FLAG = 'Y'
AND HOUCF.CLASSIFICATION_CODE = 'DEPARTMENT'

Ardından ilgili alana sürükleyp bırakıyorum.

Bu sayede artık bu sorgudaki kayıt döndü

Durationları İzin tablosundan alırken tatiller düşmediği için hak ediş tablosundan alırız.

Union All ile Sorgu birleştireceğimiz için null şeklinde tablolara columnlar atıyoruz.

Assignment Idyi Person İd ile değiştiriyoruz.

Hangisinin hak ediş hangisinin izin olduğunu görmek için tur isimli yeni bir alan yarattık

Sistemde Gönderilmiş Onaylanmış ve Onay bekleyen izinleri görmek için STATUS_CD koşullarımızı ekledik.

SELECT PP.PERSON_ID,
A.DURATION,
A.START_DATE,
A.END_DATE,
A.TUR
FROM PER_ALL_PEOPLE_F PP,
PER_ALL_ASSIGNMENTS_M ASG,
(SELECT TL.NAME IZIN_PLANI,
DTL.VALUE DURATION,
DTL.PROCD_DATE START_DATE,
NULL END_DATE,
DTL.TYPE,
DTL.PERSON_ID,
DTL.ASSIGNMENT_ID,
'Hak Ediş' TUR
FROM ANC_PER_ACRL_ENTRY_DTLS DTL,
ANC_PER_PLAN_ENROLLMENT ENR,
ANC_ABSENCE_PLANS_F_TL TL
WHERE DTL.TYPE ='FLDR'
AND DTL.PER_PLAN_ENRT_ID = ENR.PER_PLAN_ENRT_ID
AND TRUNC (SYSDATE) BETWEEN ENR.ENRT_ST_DT AND ENR.ENRT_END_DT
AND ENR.STATUS = 'A'
AND DTL.PL_ID = TL.ABSENCE_PLAN_ID
AND TL.LANGUAGE = 'TR'
AND TRUNC (SYSDATE) BETWEEN TL.EFFECTIVE_START_DATE
AND TL.EFFECTIVE_END_DATE

AND TL.NAME = 'Yıllık İzin Planı '
AND DTL.VALUE <> 0
UNION ALL
SELECT AAT.NAME IZIN_PLANI,
NULL DURATION,
ANC.START_DATE,
ANC.END_DATE,
NULL TYPE ,
ANC.PERSON_ID,
NULL ASSIGMENT_ID,
'IZIN' TUR
FROM ANC_PER_ABS_ENTRIES ANC, ANC_ABSENCE_TYPES_F_TL AAT
WHERE ANC.ABSENCE_STATUS_CD = 'SUBMITTED'
AND ANC.APPROVAL_STATUS_CD IN ('APPROVED', 'AWAITING')
AND ANC.ABSENCE_TYPE_ID = AAT.ABSENCE_TYPE_ID
AND AAT.LANGUAGE = 'TR'
AND TRUNC (SYSDATE) BETWEEN AAT.EFFECTIVE_START_DATE
AND AAT.EFFECTIVE_END_DATE
AND AAT.NAME = 'Yıllık İzin') A
WHERE TRUNC (SYSDATE) BETWEEN PP.EFFECTIVE_START_DATE
AND PP.EFFECTIVE_END_DATE
AND PP.PERSON_ID = ASG.PERSON_ID
AND TRUNC (SYSDATE) BETWEEN ASG.EFFECTIVE_START_DATE
AND ASG.EFFECTIVE_END_DATE
AND ASG.ASSIGNMENT_TYPE IN ('E', 'C')
AND ASG.ASSIGNMENT_STATUS_TYPE = 'ACTIVE'
AND ASG.PRIMARY_FLAG = 'Y'
AND A.PERSON_ID = ASG.PERSON_ID
ORDER BY START_DATE DESC

Ardından izin kaydına ait durationları hesaplamak için ayrı bir iç select yazıyoruz.

İzin kayıtları ABS Şeklinde tutulduğu için Typeı abs girdik.


SELECT SUM(DTL.VALUE)
FROM ANC_per_ACRL_ENTRY_DTLS DTL,
ANC_PER_PLAN_ENROLLMENT ENR,
ANC_ABSENCE_PLANS_F_TL TL
WHERE
DTL.TYPE = 'ABS'
AND DTL.PER_PLAN_ENTR_ID = ENR.PER_PLAN_ENTR_ID
AND TRUNC (SYSDATE) BETWEEN ENR.ENRT_ST_DT AND ENR.ENRT_END_DT
AND ENR.STATUS = 'A'
AND DTL.PL_ID = TL.ABSENCE_PLAN_ID
AND TL.LANGUAGE = 'TR'
AND TRUNC (SYSDATE) BETWEEN TL.EFFECTIVE_START_DATE AND TL.EFFECTIVE_END_DATE
AND DTL.PER_ABSENCE_ENTRY_ID = ANC.PER_ABSENCE_ENTRY_ID
AND TL.NAME = 'Yıllık İzin Planı'
and dtl.value <> 0

Bu yazdığım sorgumu Duration kısmına NVL fonksiyonuyla boşsa ancdeki durationu dönecek şekilde yapıştırırıyorum.

  SELECT PP.PERSON_ID,
A.DURATION,
A.START_DATE,
A.END_DATE,
A.TUR
FROM PER_ALL_PEOPLE_F PP,
PER_ALL_ASSIGNMENTS_M ASG,
(SELECT TL.NAME IZIN_PLANI,
DTL.VALUE DURATION,
DTL.PROCD_DATE START_DATE,
NULL END_DATE,
DTL.TYPE,
DTL.PERSON_ID,
DTL.ASSIGNMENT_ID,
'Hak Ediş' TUR
FROM ANC_PER_ACRL_ENTRY_DTLS DTL,
ANC_PER_PLAN_ENROLLMENT ENR,
ANC_ABSENCE_PLANS_F_TL TL
WHERE DTL.TYPE = 'FLDR'
AND DTL.PER_PLAN_ENRT_ID = ENR.PER_PLAN_ENRT_ID
AND TRUNC (SYSDATE) BETWEEN ENR.ENRT_ST_DT AND ENR.ENRT_END_DT
AND ENR.STATUS = 'A'
AND DTL.PL_ID = TL.ABSENCE_PLAN_ID
AND TL.LANGUAGE = 'TR'
AND TRUNC (SYSDATE) BETWEEN TL.EFFECTIVE_START_DATE
AND TL.EFFECTIVE_END_DATE
AND TL.NAME = 'Yıllık İzin Planı '
AND DTL.VALUE <> 0
UNION ALL
SELECT AAT.NAME IZIN_PLANI,
NVL (
(SELECT SUM (DTL.VALUE)
FROM ANC_PER_ACRL_ENTRY_DTLS DTL,
ANC_PER_PLAN_ENROLLMENT ENR,
ANC_ABSENCE_PLANS_F_TL TL
WHERE DTL.TYPE = 'ABS'
AND DTL.PER_PLAN_ENTR_ID = ENR.PER_PLAN_ENTR_ID
AND TRUNC (SYSDATE) BETWEEN ENR.ENRT_ST_DT
AND ENR.ENRT_END_DT
AND ENR.STATUS = 'A'
AND DTL.PL_ID = TL.ABSENCE_PLAN_ID
AND TL.LANGUAGE = 'TR'
AND TRUNC (SYSDATE) BETWEEN TL.EFFECTIVE_START_DATE
AND TL.EFFECTIVE_END_DATE
AND DTL.PER_ABSENCE_ENTRY_ID =
ANC.PER_ABSENCE_ENTRY_ID
AND TL.NAME = 'Yıllık İzin Planı'
AND DTL.VALUE <> 0),
ANC.DURATION) DURATION,
ANC.START_DATE,
ANC.END_DATE,
NULL TYPE,
ANC.PERSON_ID,
NULL ASSIGMENT_ID,
'IZIN' TUR
FROM ANC_PER_ABS_ENTRIES ANC, ANC_ABSENCE_TYPES_F_TL AAT
WHERE ANC.ABSENCE_STATUS_CD = 'SUBMITTED'
AND ANC.APPROVAL_STATUS_CD IN ('APPROVED', 'AWAITING')
AND ANC.ABSENCE_TYPE_ID = AAT.ABSENCE_TYPE_ID
AND AAT.LANGUAGE = 'TR'
AND TRUNC (SYSDATE) BETWEEN AAT.EFFECTIVE_START_DATE
AND AAT.EFFECTIVE_END_DATE
AND AAT.NAME = 'YıLLıK İZIN') A
WHERE TRUNC (SYSDATE) BETWEEN PP.EFFECTIVE_START_DATE
AND PP.EFFECTIVE_END_DATE
AND PP.PERSON_ID = ASG.PERSON_ID
AND TRUNC (SYSDATE) BETWEEN ASG.EFFECTIVE_START_DATE
AND ASG.EFFECTIVE_END_DATE
AND ASG.ASSIGNMENT_TYPE IN ('E', 'C')
AND ASG.ASSIGNMENT_STATUS_TYPE = 'ACTIVE'
AND ASG.PRIMARY_FLAG = 'Y'
AND A.PERSON_ID = ASG.PERSON_ID
ORDER BY START_DATE DESC

Ardından Tür kısmının Textini Case when kullanarak değiştirdik.

CASE WHEN ANC.APPROVAL_STATUS_CD = 'APPROVED' THEN 'Onaylandı' ELSE 'Onay Bekliyor' END
TUR

İzindeki Hakediş kısmına Value alanını HakEdiş Süresi olarak ekledik.

DTL.VALUE          HAKEDIS_DURATION,
Null Absence_Duration

Ardından

NVL (
(SELECT SUM (DTL.VALUE)
FROM ANC_PER_ACRL_ENTRY_DTLS DTL,
ANC_PER_PLAN_ENROLLMENT ENR,
ANC_ABSENCE_PLANS_F_TL TL
WHERE DTL.TYPE = 'ABS'
AND DTL.PER_PLAN_ENTR_ID = ENR.PER_PLAN_ENTR_ID
AND TRUNC (SYSDATE) BETWEEN ENR.ENRT_ST_DT
AND ENR.ENRT_END_DT
AND ENR.STATUS = 'A'
AND DTL.PL_ID = TL.ABSENCE_PLAN_ID
AND TL.LANGUAGE = 'TR'
AND TRUNC (SYSDATE) BETWEEN TL.EFFECTIVE_START_DATE
AND TL.EFFECTIVE_END_DATE
AND DTL.PER_ABSENCE_ENTRY_ID =
ANC.PER_ABSENCE_ENTRY_ID
AND TL.NAME = 'Yıllık İzin Planı'
AND DTL.VALUE <> 0),
ANC.DURATION)

Bu kısmı Absence_Durationa Union Alldaki 2. kısma yapışıtıryorum.

Select kısmına da Hak ediş ve absence sürelerini giriyorum.

Ardından yürüyen izin bakiyesi için person id bazında izinleri hak edişlerden çıkarıp sonrasında topluyoruz.

SUM (NVL (A.HAKEDIS_DURATION, 0 ) - NVL(A.ABSENCE_DURATION,0))
OVER (PARTITION BY PP.PERSON_ID ORDER BY A.START_DATE) RUNNING_TOTAL

Yıllık izin hak etmeden kullandığı izinler eksiye düşüyor ardından yıllık izin hak edişiyle birlikte artıyor

Ardından yürüyen izin bakiyesiyle kullanılan izinleri NVL fonksiyonun içine yazarak toplayıp kullanılabilecek günü yazıyoruz.

NVL ( SUM (NVL (A.HAKEDIS_DURATION, 0 ) - NVL(A.ABSENCE_DURATION,0))
OVER (PARTITION BY PP.PERSON_ID ORDER BY A.START_DATE), 0 ) + NVL (A.ABSENCE_DURATION,0) KULLANıLABILECEK_GUN

Manuelde düzeltme kaydı girildiği senaryo için Adjustment kayıtlarını ekliyoruz.

  DTL.TYPE IN ( 'FLDR', 'ADJOTH')

İzni hak edişe başlangıç tarihi için froma PER_SENIORITY_DATES_F psd tablosunu ekledikten sonra personel tablomla bağlıyorum.

SELECT TO_CHAR (psd.SENIORITY_DATE, 'DD.MM.YYYY') Izın_Baslangıc_Tarihi 
FROM PER_SENIORITY_DATES_F psd
WHERE psd.SENIORITY_DATE_CODE = 'IZIN_HAK_TAR'
AND papf.person_id = psd.person_id

Kişiler için tek tek çalıştırabilmesi için kişi parametresi ekledik.

 ppn.display_name = :pDisplayName

Her kullanıcının sadece kendisini görmesi için Per_Users tablosunu ekliyoruz.

Froma per_users tablomu ekledikten sonra user person id ile person tablomdaki person_idi eşledim.

Raporu kendim görebilmek için ise kendi usernameimi koşula ekledim.


AND pu.person_id = papf.person_id
AND ( pu.username = fnd_global.user_name
OR fnd_global.user_name LIKE '%calkan%')

Kullanıcı ismine bakmak için hesabıma gidebilirsiniz.

Tarih parametresi eklemek için Select kısmına :pdate girdikten sonra Assigment tablomuzdaki Trunc Sydate kısmını :Pdate ile değiştiriyoruz. Ardından PPOS.Dateden büyük ve ya eşit verilerin gelmesini sağlıyoruz. Ve İç selectimizde DTL. Procd_datein girilen tarihten küçük ve ya eşit olmasını sağlıyoruz.

AND :pDate BETWEEN PAAM.EFFECTIVE_START_DATE
AND PAAM.EFFECTIVE_END_DATE


AND :pDate >= PPOS.DATE_sTART


AND DTL.PROCD_DATE <= :pDate

Ardından Display Name List of Valuemı yazıyorum ve bağlıyorum.

SELECT PPN.DISPLAY_NAME
FROM per_all_assignments_m asg, per_person_names_f ppn, PER_USERS PU
WHERE 1 = 1
AND PPn.PERSON_ID = ASG.PERSON_ID
AND TRUNC (SYSDATE) BETWEEN ASG.EFFECTIVE_START_DATE
AND ASG.EFFECTIVE_END_DATE
AND ASG.ASSIGNMENT_TYPE IN ('E', 'C')
AND ASG.ASSIGNMENT_STATUS_TYPE = 'ACTIVE'
AND ASG.PRIMARY_FLAG = 'Y'
AND TRUNC (SYSDATE) BETWEEN ppn.EFFECTIVE_START_DATE
AND ppn.EFFECTIVE_END_DATE
AND ppn.name_type = 'GLOBAL'
AND pu.person_id = PPN.person_id
AND ( pu.username = fnd_global.user_name

OR fnd_global.user_name LIKE '%calkan%')

Burada p:date parametresi için ise Default Value olarak Sysdate sistem tarihini girdim.

İzin başlangıç tarihi izin planın başlangıç tarihinden büyük ve ya eşit olanları getirmek için iç select yazıyoruz.

 AND a.start_date >=
(SELECT ENR.ENRT_ST_DT
FROM ANC_PER_PLAN_ENROLLMENT ENR, ANC_ABSENCE_PLANS_F_TL TL
WHERE 1 = 1
AND TRUNC (SYSDATE) BETWEEN ENR.ENRT_ST_DT
AND ENR.ENRT_END_DT
AND ENR.STATUS = 'A'
AND enr.PLan_ID = TL.ABSENCE_PLAN_ID
AND TL.LANGUAGE = 'TR'
AND TRUNC (SYSDATE) BETWEEN TL.EFFECTIVE_START_DATE
AND TL.EFFECTIVE_END_DATE
AND TL.NAME = 'Yıllık İzin Planı'
AND enr.person_id = pp.person_id)

--

--

Kaan Can Calkan

Former Web Developer , SAP HCM and Oracle Technical Consultant . Currently working as a SAP HCM Full Stack Dev .Sharing my learning path with you.