How to use 'Bind Variable' with 'With clause' in a Dynamic query using PLSQL
You got it wrong, I'm afraid. This is what your query evaluates to:
with binds as 
  (select :bind1 as amount1, 
          :bind2 as amount2                        
   from dual)
select t.c_num
  from z_test_a t, 
       binds b               --&gt; this is &quot;B&quot;
  where 1 = 1
intersect 
select c_num 
  from z_test_b 
  where amount = b.amount1   --&gt; you can't reference &quot;B&quot; here
             

Instead of intersect, you could:

use :bind1 in z_test_b, i.e.
intersect
  select c_num
  from z_test_b
  where amount = :bind1


or join z_test_b with z_test_a and binds (but I presume that former suggestion is simpler because of possible where clause; currently, it is useless (where 1 = 1), but I presume that it is here just for illustration. Something like this:
-- CTE you already have; remove WHERE from it
with binds as 
  (select :bind1 as amount1, 
          :bind2 as amount2                        
   from dual)
select t.c_num
  from z_test_a t,
       binds b
                      --&gt; WHERE's not here any more; it is moved to join

-- JOIN
, z_test_b z
where z.amount = b.amount1       --&gt; moved here