select ... into ... from у plpgsql.
postgres=# create table test
postgres-# (field1 numeric, field2 text, field3 text);
CREATE TABLE
postgres=# insert into test values
postgres-# (1, 'field2val1', 'field3val1'),
postgres-# (2, 'field2val2', 'field3val2');
INSERT 0 2
postgres=# create function test_f() returns text as $$
postgres$# DECLARE
postgres$# f1 numeric;
postgres$# f2 text;
postgres$# f3 text;
postgres$# begin
postgres$# select field1, field2, field3
postgres$# into f1, f2 f3
postgres$# from test where field1 = 1;
postgres$#
postgres$# return f3;
postgres$# end;
postgres$# $$ LANGUAGE plpgsql;
CREATE FUNCTION
postgres=# select test_f();
test_f
--------
(1 row)
здесь в into пропущена запятая и число переменных меньше, чем число возвращаемых значений в select.
но если верить доке, это не должно работать, т.к. > If a row or a variable list is used as target, the query's result columns must exactly match the structure of the target as to number and data types, or else a run-time error occurs.
(c) https://www.postgresql.org/docs/12/plpgsql-statements.html#PLPGSQL-STATEMENTS-SQL-ONEROW
может кто-то проверить - воспроизводится у них или нет?
потому что выглядит багом в слонике.
Да, воспроизводится (повыбирайте там другие версии, если интересно): https://dbfiddle.uk/?rdbms=postgres_13&fiddle=dde4d309b37908d24f37e4ec37b3950b
Получается, так. Я тут быстро спросил в IRC, и: <johto> I think I reported the documentation bug years ago. BUG #8870. I sent a patch 7 years ago which was ignored :) Так что, можете найти этот thread, и пожаловаться там. ;)
Да не за что! ;)
На эту ошибку даже plpgsql_check не ругается
Обсуждают сегодня