Неожиданный конец ввода в параметре многомерного массива хранимой процедуры Postgresql - PullRequest
0 голосов
/ 27 марта 2019

Я построил хранимую процедуру в PostgreSql, которая принимает параметры многомерного массива, как показано ниже

SELECT horecami.insert_obj_common(
'{"(5, 2, LLLLL rest, 46181, a@a.com, ooo, kkk, 12:09, 20:40, 23, true, 49.667, 48.232, fu, 2011-12-15 15:28:19+04, 2011-12-15 15:28:19+04, 3, 1)"}'::obj_special[],
    '{"(1, 3, q1, q2, q3,  q4, qson  latest, true, 2011-12-15 15:28:19+04, 2, 2, 3, 2011-12-15 15:28:19+04, ' ||  '{"(1, 1, 1, 1, 1)"}'::horecami.obj_soft_hardware[] || ')"}'::obj_soft[]

);

Внутри этой процедуры есть циклы foreach, которые работают без проблем. Но когда я добавил последний дополнительный параметр в виде массива (horecami.obj_soft_hardware []), это выдает мне некорректную ошибку массива. Это ошибка

ERROR:  malformed array literal: "{"(1, 3, q1, q2, q3,  q4, qson  latest, true, 2011-12-15 15:28:19+04, 2, 2, 3, 2011-12-15 15:28:19+04, "
LINE 3:  '{"(1, 3, q1, q2, q3,  q4, qson  latest, true, 2011-12-15 1...
     ^
DETAIL:  Unexpected end of input.
SQL state: 22P02
Character: 202

Должен вернуть номер

Полагаю, это ошибка syntac. Спасибо заранее.

1 Ответ

1 голос
/ 27 марта 2019

У вас нет многомерного массива;у вас есть массив, содержащий составной тип, который, в свою очередь, содержит массив, содержащий составной тип.

При записи этого в виде строкового литерала некоторые символы должны быть экранированы (например, строки с пробелами требуют кавычек, а эти кавычки должны экранироваться).Затем на вложенных уровнях все они должны быть заключены в двойные кавычки и экранированы.

Чтобы определить, как должен выглядеть строковый литерал, просто создайте его, используя фактические массивы и строки (или составные типы), а затем приведите к тексту, чтобы получитьбуквальное строковое значение со всеми полями, которые указаны правильно и экранированы:

SELECT ARRAY[ROW(1, 3, 'q1', 'q2', 'q3', 'q4', 'qson  latest', ARRAY[ROW(1, 1, 1, 1, 1)])]::TEXT

Возвращает:

{"(1,3,q1,q2,q3,q4,\"qson  latest\",\"{\"\"(1,1,1,1,1)\"\"}\")"}
...