WITH kullanımının mantığı; iç içe sorgularda, aynı sorgunun tekrar tekrar yazılmasını ortadan kaldırmaktır. WITH ile oluşturduğumuz tablo, localde tutulmaktadır, data dictionary’de tutulmamaktadır (procedure,function data dictionary’de tutulur.) Basti bir örnekle açıklamak gerekirse.
NOT: Örneği HR şeması üzerinden gösteriyor olacağım. HR schemasını(şemasını) nasıl kurarım, buraya tıklayınız.
SELECT deptno, bdate,job FROM employees
sorgusunun sonucu:

WITH my_employee AS (SELECT deptno, bdate,job FROM employees) SELECT * FROM my_employee WHERE deptno='20' UNION ALL SELECT * FROM my_employee WHERE job like 'AD%';
sorgusunun sonucu:

Yukarıdaki sorguda: my_employee isimli obje tanımlıyorum, bu obje benim daha sonra alt sorgularda kullanacağım, sorguyu içeriyor.
Benzer mantıkta fonksiyonu da, WITH ile çağırabiliriz. Yani data dictionary’ye kaydetmeden. WITH FUNCTION kullanıldığı zaman, hemen arkasından ilgili select çalıştırılmalı.