Я изучал этот сайт, чтобы узнать, как сбрасывать результаты выражения select в массив, поэтому я могу выполнять итерацию по массиву. Однако мне не посчастливилось найти простой пример. Приведенный ниже код является примером того, что я сделал. Однако я не могу понять, как это сделать с помощью массива. Только строковая конструкция. Всякий раз, когда я пытаюсь присвоить результаты запроса массиву, я получаю эту ошибку в подзапросе (например, что-то вроде «array: = (select ... from sometable)», что я понимаю, но должен быть способ сделать это. заранее. (дополнение: псевдокод для того, что я предпочитаю под этим фактический кодом)..PostgreSQL - SELECT INTO ARRAY
DO
$$
DECLARE
nRowCount bigint;
i record;
BEGIN
DROP TABLE IF EXISTS companies_sample_db_temp;
CREATE TABLE companies_sample_db_temp (
col1 varchar
, col2 varchar
, col3 varchar
);
INSERT INTO companies_sample_db_temp VALUES ('McDonalds','Los Angeles','CA');
INSERT INTO companies_sample_db_temp VALUES ('Starbucks','Seattle','WA');
INSERT INTO companies_sample_db_temp VALUES ('Oracle','San Francisco','CA');
-- SELECT * FROM companies_sample_db_temp;
FOR i IN
with a as
(
SELECT
ARRAY[col1::text
, col2::text
, col3::text
] as coltext
FROM companies_sample_db_temp AS my_arr
)
select row_number() over(), coltext from a
LOOP
-- RAISE INFO 'nRowCount: %', nRowCount;
RAISE INFO 'Array Info: %', i.coltext[1];
END LOOP;
END
$$;
/*********** Pseudo Code of what I'd rather do *******************/
DO
$$
DECLARE
-- Assign results of this query to an array
my_arr := SELECT col1, col2,col3 FROM companies_sample_db_temp;
i record;
BEGIN
-- Loop through an "array" not a table using a select statement.
FOR i IN
-- Iterate through each row of the array
my_arr[i] -- Row from the select query
LOOP
-- Display an elements within a single array row
RAISE INFO 'Array Info: %', my_arr[i][1]; -- col1
RAISE INFO 'Array Info: %', my_arr[i][2]; -- col2
RAISE INFO 'Array Info: %', my_arr[i][3]; -- col3
END LOOP;
END $$;
Надеется, что это проясняет вопрос
Почему вы хотите массив, а не набор строк? Это SQL, наборы строк - это нормальная вещь, которую нужно перевернуть - или, предпочтительно, работать с операторами SQL и позволить СУБД решить, нужна ли вообще петля ... – IMSoP
Очень хороший вопрос. Причина, по которой я предпочитаю использовать массив, связана с производительностью. Я буду первым, кто скажет, что я ошибаюсь в этом, так как я все еще новичок. Однако на других языках переменные памяти обычно значительно быстрее, чем наборы записей или таблицы. Если это не так, сообщите мне, где я могу найти информацию по этому вопросу (если вы знакомы с кем-либо). Мне не повезло. –
На самом деле, наборы записей и таблицы очень часто бывают быстрее, чем «переменные памяти» (я предполагаю, что вы подразумеваете логику приложения вне базы данных здесь), если только программное обеспечение не разработано разработчиками «веб-масштаба», которые считают, что база данных представляет собой гигантский массив. (По общему признанию, последнее часто встречается.) –