Postgresql 存储过程多维数组参数中的输入意外结束
Unexpected end of input in Postgresql stored procedure multidimensial array parameter
我在 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
必须return个
我猜是这个语法错误。
预先感谢。
您没有多维数组;您有一个包含复合类型的数组,该数组又包含一个包含复合类型的数组。
将其写为字符串文字时,必须转义某些字符(例如,带空格的字符串需要引号,而这些引号需要转义)。然后在嵌套级别,它们都需要被双引号和转义。
要确定字符串文字应该是什么样子,只需使用实际的数组和行(或复合类型)创建它,然后转换为文本以获得所有字段都正确引用和转义的文字字符串值:
SELECT ARRAY[ROW(1, 3, 'q1', 'q2', 'q3', 'q4', 'qson latest', ARRAY[ROW(1, 1, 1, 1, 1)])]::TEXT
Returns:
{"(1,3,q1,q2,q3,q4,\"qson latest\",\"{\"\"(1,1,1,1,1)\"\"}\")"}
我在 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
必须return个
我猜是这个语法错误。 预先感谢。
您没有多维数组;您有一个包含复合类型的数组,该数组又包含一个包含复合类型的数组。
将其写为字符串文字时,必须转义某些字符(例如,带空格的字符串需要引号,而这些引号需要转义)。然后在嵌套级别,它们都需要被双引号和转义。
要确定字符串文字应该是什么样子,只需使用实际的数组和行(或复合类型)创建它,然后转换为文本以获得所有字段都正确引用和转义的文字字符串值:
SELECT ARRAY[ROW(1, 3, 'q1', 'q2', 'q3', 'q4', 'qson latest', ARRAY[ROW(1, 1, 1, 1, 1)])]::TEXT
Returns:
{"(1,3,q1,q2,q3,q4,\"qson latest\",\"{\"\"(1,1,1,1,1)\"\"}\")"}