hay varias cosas en las que veo inconsistencias.
   Cita:  IF query_locales.has_locales THEN
    Esta comparando esto con que?
no sería: 
IF query_has_locales.has_locales = 'algo' THEN?
dentro del if hace esta consulta 
 Cita:  SELECT  pk_locale,name FROM sm_locale WHERE fk_pk_city = query_count.city_code;
    que fin tiene esa consulta? no veo que se salven los valores retornados por la consulta para ser usados. 
Donde se usa este record declarado? query_locale  
Describe un poco que tratas de hacer. Tal vez haya una forma mas optima de obtener los mismos resultados. 
saludos