Переменная, объявленная в блоке else, не распознается, потому что область видимости переменных ограничена блоком, в котором они были объявлены. Поэтому переменные, объявленные в блоке else, не будут доступны за его пределами.
Ошибка "relation 'required_materials' does not exist" на 29-й строке в блоке else может возникать по разным причинам. Одна из причин может быть то, что переменная или таблица 'required_materials', к которой вы обращаетесь в этой строке, не существует или не была создана до этого момента. Другая причина может быть связана с неверным обращением к таблице или неправильным синтаксисом запроса к базе данных. Необходимо проверить правильность написания имени таблицы и доступность этой таблицы перед выполнением запроса.