У меня есть список.
Id int primary key,
Name varchar(100)
И я хочу создать функцию fnGetRoster (int), которая будет возвращать имя путем поиска в таблице Ростера.
Как это:
create or replace function fnGetRoster(int)
returns varchar(100)
stable
as $$
select name from Roster where Id = $1
$$ language sql
Мне так трудно это сделать в RedShift, так как я не могу использовать откуда, где и т. Д.
Что я мог сделать? Я неправильно использовал функцию?
================== Недавно добавленная информация (после 1 ответа) ====================
Я вижу много людей, упомянутых о хранимых процедурах и присоединении. Спасибо, но, пожалуйста, прости меня, что я не очень хорошо описал всю проблему, так как исходная проблема была немного длинной, поэтому я спросил простую версию.
Я перемещаю старую таблицу и создаю новую структуру. Одно из полей содержит что-то вроде этого
Category
CatA : CatB : CatC : ..... : CatX
где другая таблица называется Категория
Id ParentId CategoryName
-----+-------------+-----------------
1 | NULL | CatA
-----+-------------+-----------------
2 | 1 | CatB
-----+-------------+-----------------
3 | 2 | CatC
-----+-------------+-----------------
4 | 3 | CatD
-----+-------------+-----------------
Плохо то, что в этой таблице нет категории categoryID, поэтому мне нужно проанализировать всю строку, чтобы выяснить CategoryId. Я не могу использовать последнюю часть строки напрямую, поскольку нет гарантии, что имя уникально. (но есть гарантия, что полное название категории уникально). Я надеюсь написать функцию, которая может выполнять анализ, а затем выходит с идентификатором, но я обнаружил, что функции , похоже, предназначены для целей, отличных от RedShift ...
Сейчас я борюсь с процедурами ... И я собираюсь переместить эту задачу переноса данных из Redshift (используйте ее только для сохранения результата)