Я хочу, чтобы результат, который объединяет элементы, генерируемые циклом for, сохранялся в ARRAY или String
Вот мой код, который может генерировать список строк, которые я хочу, но я не знаю, как использовать этот список, так как я не могу сохранить его как массив или Concat.
FOR record IN (SELECT column_name FROM mytable where table_name = 'X')
DO
SELECT FORMAT("(%s IS NULL OR TRIM(%s) = '')", record.column_name,record.column_name);
END FOR;
Я хочу использовать его для хранимой процедуры, как только он вызовет, он может генерировать строку, которая проверяет логическую базу на столбцах в таблице, которая анализирует параметр в созданной процедуре.
Подводить итоги, я хотел бы знать, как сохранить результат этого запроса в виде массива или строки
Вы можете объявить переменную для хранения результата написанного вами скрипта. Я не уверен, что понял требование, но если вы просто хотите хранить отформатированные строки в виде массива, вам не нужно использовать цикл, и будет достаточно следующего запроса. После этого вы можете сослаться на переменную в своей хранимой процедуре.
DECLARE formats ARRAY<STRING>;
-- a temp table for the test
CREATE TEMP TABLE mytable AS
SELECT 'col1' AS column_name, 'X' AS table_name
UNION ALL
SELECT 'col2' AS column_name, 'Y' AS table_name
UNION ALL
SELECT 'col3' AS column_name, 'X' AS table_name
;
SET formats = (
SELECT ARRAY_AGG(FORMAT("(%s IS NULL OR TRIM(%s) = '')", column_name, column_name))
FROM mytable
WHERE table_name = 'X'
);
SELECT formats;
--
output:
[(col3 IS NULL OR TRIM(col3) = ''), (col1 IS NULL OR TRIM(col1) = '')]
И приведенное выше условие можно записать по-другому.
(col3 IS NULL OR TRIM(col3) = '')
-->
IFNULL(col3, '') = ''
Последнему не нужен оператор OR
и круглые скобки.