Хорошо, когда вы объявляете переменную "new_table" и выполняете SELECT ..INTO "new_table", значение присваивается переменной "new_table". Вы увидите, что если вы вернете свою переменную с помощью параметра OUT.
А когда вы удалите объявление, оно просто будет работать как синтаксис SELECT INTO Redshift SQL и создаст таблицу.
Теперь к решению:
Создайте таблицу с использованием синтаксиса CREATE TABLE AS ....
Также вам необходимо передать значение объявленной переменной, поэтому используйте команду EXECUTE.
CREATE OR REPLACE PROCEDURE public.ct_tab (vname varchar)
AS $$
DECLARE tname VARCHAR(50):='public.swap_'||vname;
BEGIN
execute 'create table ' || tname || ' as select ''name''';
END;
$$ LANGUAGE plpgsql
;
Теперь, если вы вызываете процедуру, передавая 'ab c', в схеме publi c будет создана таблица с именем "swap_ab c".
call public.ct_tab('abc');
Let я знаю, если это поможет:)