Notes
- 
Une définition CTE peut contenir n’importe quel instruction SELECTvalide tant qu’elle ne contient pas le préambule “`WITH…`” (les instructionsWITHne peuvent pas être imbriqués) ;
- 
Les CTE peuvent s’utiliser mutuellement, mais les références ne doivent pas comporter de boucles ; 
- 
CTE peut être utilisé dans n’importe quelle partie de la requête principale ou autre expression tabulaire et autant de fois que souhaité ; 
- 
La requête principale peut faire référence à un CTE plusieurs fois, mais avec des alias différents ; 
- 
Les CTE peuvent être utilisés dans les instructions INSERT,UPDATEetDELETEcomme sous-requêtes ;
- 
Si le CTE déclaré n’est pas utilisé, un message d’avertissement “CTE cte is not used in query” sera émis. Dans les versions antérieures, une erreur était émise au lieu d’un avertissement ; 
- 
Les CTE peuvent également être utilisés dans PSQL dans les boucles FOR:FOR WITH MY_RIVERS AS ( SELECT * FROM RIVERS WHERE OWNER = 'me' ) SELECT NAME, LENGTH FROM MY_RIVERS INTO :RNAME, :RLEN DO BEGIN ... END
Exemples
WITH
  DEPT_YEAR_BUDGET AS (
    SELECT
      FISCAL_YEAR,
      DEPT_NO,
      SUM(PROJECTED_BUDGET) BUDGET
    FROM PROJ_DEPT_BUDGET
    GROUP BY FISCAL_YEAR, DEPT_NO
  )
SELECT
  D.DEPT_NO,
  D.DEPARTMENT,
  DYB_2008.BUDGET BUDGET_08,
  DYB_2009.BUDGET AS BUDGET_09
FROM
  DEPARTMENT D
  LEFT JOIN DEPT_YEAR_BUDGET DYB_2008
    ON D.DEPT_NO = DYB_2008.DEPT_NO AND
       DYB_2008.FISCAL_YEAR = 2008
  LEFT JOIN DEPT_YEAR_BUDGET DYB_2009
    ON D.DEPT_NO = DYB_2009.DEPT_NO AND
       DYB_2009.FISCAL_YEAR = 2009
WHERE EXISTS (SELECT *
              FROM PROJ_DEPT_BUDGET B
              WHERE D.DEPT_NO = B.DEPT_NO)