Reemplazar parte del campo con valores de la consulta

Tengo un campo que se completa con una serie de criterios en un formatting específico:

CRITERIA $1 = True $2 > $3 

La información de los criterios se almacena en una tabla

 CRIT_ID CRIT_DESCRIPTION 1 Example 1 2 Example 2 3 Example 3 

El resultado final debería verse así

 CRITERIA Example 1 = True Example 2 > Example 3 

¿Alguien puede sugerir la mejor manera de lograr esto? He intentado REEMPLAZAR y paré con REGEXP_REPLACE hasta ahora …

Quizás no sea el más eficiente, pero funciona de manera recursiva (es decir, si la crit_description contiene "marcadores de position", también se amplían (una primera solución, más simple que la que se muestra a continuación, no hizo este paso recursivo). Ver la tercera input de muestra que agregué. Volveré a publicar más tarde si puedo limpiarla un poco más.

NOTA: Esto supone que todos los "marcadores de position" se encuentran realmente en la tabla criteria_info ; No probé lo que sucede si no se encuentran. OP para indicar el requisito.

 with inputs ( criteria ) as ( select '$1 = True' from dual union all select '$2 > $3' from dual union all select '$1 = $4' from dual ), criteria_info ( crit_id, crit_description ) as ( select 1, 'Example 1' from dual union all select 2, 'Example 2' from dual union all select 3, 'Example 3' from dual union all select 4, '$2 + $3' from dual ), rec ( criteria, new_str ) as ( select criteria, criteria from inputs union all select r.criteria, regexp_replace(r.new_str, '\$\d+', c.crit_description, 1, 1) from rec r inner join criteria_info c on to_number(regexp_substr(r.new_str, '\$(\d+)', 1, 1, null, 1)) = c.crit_id where regexp_substr(r.new_str, '\$\d+') is not null ) select criteria, new_str from rec where regexp_substr(new_str, '\$\d+') is null ; CRITERIA NEW_STR --------- ------------------------------------ $1 = True Example 1 = True $2 > $3 Example 2 > Example 3 $1 = $4 Example 1 = Example 2 + Example 3 3 rows selected. 

En la siguiente consulta estoy usando el primer ESPACIO como un separador entre el ID y la ecuación (y suponiendo que el id siempre comience en el segundo carácter).

 SELECT B.CRIT_DESCRIPTION || SUBSTR(A.CRITERIA, INSTR(A.CRITERIA, ' ')) FROM A, B WHERE TO_NUMBER(SUBSTR(A.CRITERIA, 2, INSTR(A.CRITERIA, ' ') - 2)) = B.CRIT_ID