Как временно сохранить запись в функции postgresql? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть таблица, в которой у меня есть список городов и присвоенных им уникальных кодов (city_code_table).

У меня также есть таблица, в которой у меня есть список названий улиц и код городов ( street_table).

Я хотел бы создать функцию, в которой на входе указывается название города, и она создает таблицу с улицами в этом городе.

Функция будет выглядеть следующим образом :

CREATE OR REPLACE FUNCTION func_1(city_name text)
RETURNS VOID AS
$body$
BEGIN
!!!MISSING PART!!!
    EXECUTE 'CREATE TABLE '||quote_ident(city_name)||'_streets AS
            SELECT * from street_table where city_code = temporary_variable;'
    RETURN;
END;
$body$
LANGUAGE plpqsql;

В пропущенной части я хотел бы как-то сохранить переменную временного_образа в результате

SELECT city_code from city_code_table where city_name is 'Budapest';

Я знаю, что на этом языке это работает не так, но я на 100 % уверен, что результатом последнего кода всегда будет одна запись, а не больше. Я мог бы вставить это в предыдущие коды следующим образом:

SELECT * from street_table where city_code = (SELECT city_code from city_code_table where city_name is 'Budapest');

Я не очень хочу этого делать, потому что в полной функции я бы использовал этот код несколько раз, так что это решение действительно замедлило бы процесс, на мой взгляд. Также я знаю, что было бы намного проще сделать это, если бы у street_table были бы также названия городов, и не только коды, но это не я сам решаю это.

Спасибо за любую помощь заранее!

1 Ответ

1 голос
/ 20 апреля 2020

Весь подход кажется мне неправильным, но в любом случае: вы можете использовать полный оператор SELECT в вашем операторе CREATE TABLE.

EXECUTE 'CREATE TABLE '||quote_ident(city_name)||'_streets AS
         SELECT * 
         from street_table 
         where city_code in (select city_code 
                             from city_code_table 
                             where city_name = $1)'
     USING city_name;

Часть USING передает значение параметра функции заполнителю параметра $1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...