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'