Я создаю временную таблицу, беру данные из нескольких таблиц и вставляю в нее данные. Когда я пытаюсь вернуть данные из таблицы, я получаю сообщение об ошибке
[42601] ERROR: query has no destination for result data Hint: If you want to discard the results of a SELECT, use PERFORM instead.
do
$$
DECLARE
sampleproductId varchar;
productIds text[] := array [
'abc1',
'abc2'
];
tId varchar;
DECLARE result jsonb;
DECLARE resultS jsonb[];
begin
CREATE TEMP TABLE IF NOT EXISTS product_temp_mapping
(
accountid int,
productUID varchar,
sampleproductId text
);
FOREACH sampleproductId IN ARRAY productIds
LOOP
tId := (select id
from product.product
where uid = sampleproductId);
INSERT into product_temp_mapping (accountid, productUID, sampleproductId)
select accountid, tId, sampleproductId
from product.accountproductmap
where productId = cast(tId as int);
END LOOP;
select * from product_temp_mapping;
end ;
$$;
Это правильный способ сделать это? Это первый раз, когда я что-то делаю с временной таблицей
Проблема в этом select * from product_temp_mapping;
. Основная проблема заключается в том, что вы не можете RETURN
ничего из анонимной (DO
) функции, что, как я полагаю, именно то, что вы пытаетесь сделать. Следующая проблема заключается в том, что даже если вы делаете это в обычной функции, вам необходимо, как указано в сообщении об ошибке, назначить выход SELECT
чему-то.
Зачем вообще временная таблица? Это можно сделать более эффективно с помощью всего одного оператора SELECT.
«Правильно ли это сделать?» - довольно широкий вопрос. Я должен ответить «нет».
почему вы отметили mysql и postgresql? Который из них?