У меня есть «code_table», содержащая пары uinque целые ( код ) и уникальные тексты ( name ). У меня есть несколько таблиц, где у меня есть коды , но у меня нет имен . Я хотел бы создать функцию, которая возвращает таблицу, которую я намерен изменить, но также добавляет столбец с именами , соответствующими кодам . Я могу справиться с этим, делая одну за другой, но мне нужна функция с аргументом для имени таблицы.
Так, например, вот code_table :
code name
(int) (text)
1 ; "Blue"
2 ; "Yellow"
3 ; "Red"
4 ; "Green"
5 ; "Purple"
6 ; "Black"
7 ; "White"
8 ; "Gray"
У меня также есть пример таблицы - table1 :
id something code
(int) (text) (int)
1 ; "someinfo" ; 4
2 ; "someinfo" ; 2
3 ; "someinfo" ; 6
4 ; "someinfo" ; 1
5 ; "someinfo" ; 8
6 ; "someinfo" ; 4
7 ; "someinfo" ; 2
8 ; "someinfo" ; 2
9 ; "someinfo" ; 3
Я создал функцию, у которой нет возвращаемого значения, но она делает то, что хотела:
CREATE FUNCTION add_code_name()
RETURNS VOID AS
$BODY$
BEGIN
ALTER TABLE table1 ADD name text;
EXECUTE 'UPDATE table1 SET name = code_table.name FROM code_table WHERE table1.code = code_table.code';
END;
$BODY$
LANGUAGE plpgsql;
В результате я получил:
id something code name
(int) (text) (int) (text)
1 ; "someinfo" ; 4 ; "Green"
2 ; "someinfo" ; 2 ; "Yellow"
3 ; "someinfo" ; 6 ; "Black"
4 ; "someinfo" ; 1 ; "Blue"
5 ; "someinfo" ; 8 ; "Gray"
6 ; "someinfo" ; 4 ; "Green"
7 ; "someinfo" ; 2 ; "Yellow"
8 ; "someinfo" ; 2 ; "Yellow"
9 ; "someinfo" ; 3 ; "Red"
МОЙ ВОПРОС: Есть ли способ как-то поместить имя таблицы в аргумент функции, так что это сделать то же самое с любым из моих столов? Также я бы поставил там название столбца, содержащего код Примерно так:
add_code_name(table1.code)
Спасибо за помощь!