Я хочу подготовить динамическую строку, используя функцию.
В этом есть два основных жала: один передается в функцию, а другой присутствует в функции. Выходная строка будет изменена в соответствии с переданной в функцию строкой.
Пример:
У меня есть строка string1
, которая будет передана функции. И string2
присутствует в функции.
В функции присутствует одна строка string2
:
string2 = 'A1,A2,A3,A4'
И строку string1
я передаю функции:
string1 = 'A1'
Тогда ожидаемая подготовленная строка должна выглядеть так:
A1 = 1 AND A2 IS NULL AND A3 IS NULL AND A4 IS NULL
Для приведенного выше результата я написал следующую функцию:
CREATE OR REPLACE FUNCTION f_test(string1 varchar)
RETURNS VOID AS
$$
DECLARE
string2 varchar = 'A1,A2,A3,A4';
string3 varchar;
string4 varchar;
string5 varchar;
string6 varchar;
BEGIN
string3 := REPLACE(string1,',',' = 1 AND ')||' = 1';
RAISE INFO '%',string3;
string4 := REPLACE(string2,string1,string3);
RAISE INFO '%',string4;
string5 := REPLACE(string4,'1,',' 1 AND ');
string6 := REPLACE(string5,',', ' IS NULL AND ')||' IS NULL ';
RAISE INFO '%',string6;
END;
$$
LANGUAGE PLPGSQL;
Вызов ФУНКЦИЯ
SELECT f_test('A1');
Результат: (правильно)
A1 = 1 AND A2 IS NULL AND A3 IS NULL AND A4 IS NULL
Но застрял при проходе A4
SELECT f_test('A4');
Результат:(Неправильно)
A 1 AND A2 IS NULL AND A3 IS NULL AND A4 = 1
Пока я ждал:
A1 IS NULL AND A2 IS NULL AND A3 IS NULL AND A4 = 1
Если я позвоню:
SELECT f_test('A2,A4');
Тогда результат должен быть:
A1 IS NULL AND A2 = 1 AND A3 IS NULL AND A4 = 1