Quando você usa uma string aqui <<END
all $ expansão variável é feita. É assim que suas linhas define
podem funcionar. Mas você não quer que o $lastMonth
e assim por diante na instrução WHERE seja expandido, então você precisa citá-los com barra invertida. A citação única não tem nenhum efeito especial aqui, pois estamos dentro de um hereis.
No entanto, parece que o sqlplus usa o & ampersand &
para expandir as variáveis DEFINE, então você provavelmente quer
WHERE partition_date between '01-&lastMonth-&lastYear' and '&lastDay-&lastMonth-&lastYear'