ORA-00907: Parentese não encontrado

Bom dia,

Alguém poderia ajudar com um select no oracle: quando tento executar retorna “ORA-00907: Parentese não encontrado”

SELECT REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
	CAST((
	SELECT '' TR, TPRODUTO.CODIGOPRD AS TD, TPRODUTO.NOMEFANTASIA AS TD1, TPRODUTODEF.CODUNDCONTROLE AS TD2, SALDOFISICO2 AS TD3, TPRODUTODEF.ESTOQUEMINIMO1 AS TD4, '' AS TF
	  FROM TPRODUTO
	 INNER JOIN TPRDLOC  ON  TPRODUTO.IDPRD = TPRDLOC.IDPRD
INNER JOIN TPRODUTODEF ON TPRODUTO.IDPRD = TPRODUTODEF.IDPRD
	 WHERE TPRODUTODEF.CODCOLIGADA =1
	   AND TPRODUTODEF.ESTOQUEMINIMO1 >0
	   AND TPRODUTO.INATIVO = 0
	   AND TPRDLOC.SALDOFISICO2 <= TPRODUTODEF.ESTOQUEMINIMO1
FOR XML ('TESTE'), TYPE)
 
AS VARCHAR(MAX))
, 'tr/', 'TR')
, 'td1', 'td')
, 'td2', 'td')
, 'td3', 'td')
, 'td4', 'td')
, 'TRF/', '/tr') AS TEXTO

Essa parte se refere à qual comando?

Bom dia Lucas, na verdade esse eu coloquei pra testar , o comando original é sem o TESTE. É
FOR XML (’’). Mas retorna o mesmo erro, preciso gerar o xml do retorno da consulta.

Eh que achei estranho o lugar onde esse FOR está. Ele faz parte do CAST?

Veja a consulta indentada:

SELECT 
  REPLACE(
    REPLACE(
      REPLACE(
        REPLACE(
          REPLACE(
            REPLACE(
              CAST(
                (
                  SELECT 
                    '' TR, 
                    TPRODUTO.CODIGOPRD AS TD, 
                    TPRODUTO.NOMEFANTASIA AS TD1, 
                    TPRODUTODEF.CODUNDCONTROLE AS TD2, 
                    SALDOFISICO2 AS TD3, 
                    TPRODUTODEF.ESTOQUEMINIMO1 AS TD4, 
                    '' AS TF
                  FROM 
                    TPRODUTO
                    INNER JOIN TPRDLOC  ON  TPRODUTO.IDPRD = TPRDLOC.IDPRD
                    INNER JOIN TPRODUTODEF ON TPRODUTO.IDPRD = TPRODUTODEF.IDPRD
                    WHERE 
                      TPRODUTODEF.CODCOLIGADA = 1
                      AND TPRODUTODEF.ESTOQUEMINIMO1 > 0
                      AND TPRODUTO.INATIVO = 0
                      AND TPRDLOC.SALDOFISICO2 <= TPRODUTODEF.ESTOQUEMINIMO1
                  FOR XML ('TESTE'), TYPE
                ) AS VARCHAR(MAX)
              )
            , 'tr/', 'TR')
          , 'td1', 'td')
        , 'td2', 'td')
      , 'td3', 'td')
    , 'td4', 'td')
  , 'TRF/', '/tr') AS TEXTO

Posso não está entendendo a sintaxe corretamente, mas esse FOR XML ('TESTE'), TYPE parece está fora do lugar.