Я пытаюсь создать простую хранимую процедуру в PostgreSQL, в которой я хочу выполнить инструкцию SELECT. Я не хочу возвращать результаты выражения select.Выполнять инструкцию SELECT и отбрасывать результаты в PL/pgSQL
Если я использую оператор выбора непосредственно как следующий код, я получаю сообщение об ошибке, что «запрос не имеет места для результирующих данных»
DECLARE
affected_rows INTEGER;
BEGIN
SET search_path TO testing;
SELECT * FROM testing.csv_data_already_imported;
GET DIAGNOSTICS affected_rows := ROW_COUNT;
RETURN affected_rows;
END;
Поэтому я использую ГОТОВЯТ .. EXECUTE заявления типа так:
DECLARE
affected_rows INTEGER;
BEGIN
SET search_path TO testing;
PREPARE fooplan AS SELECT * FROM testing.csv_data_already_imported;
EXECUTE fooplan;
GET DIAGNOSTICS affected_rows := ROW_COUNT;
RETURN affected_rows;
END;
Используя этот метод все еще дает мне ошибки:
ERROR: column "fooplan" does not exist
LINE 1: SELECT fooplan
^
QUERY: SELECT fooplan
CONTEXT: PL/pgSQL function "returning_affected_rows" line 8 at EXECUTE statement
Может ли кто-нибудь помочь мне понять, что не так? Хранимая процедура объявляется функцией plpgsql, означающей, что команда EXECUTE не должна быть считаться стандартной командой SQL для выполнения динамических операторов SQL. Все, что я хочу знать, - это как выполнить инструкцию SELECT внутри хранимой процедуры PostgreSQL без необходимости возвращать ее результаты. Полный DDL хранимой процедуры заключается в следующем:
CREATE OR REPLACE FUNCTION testing.returning_affected_rows()
RETURNS integer AS
$body$
DECLARE
affected_rows INTEGER;
BEGIN
SET search_path TO testing;
PREPARE fooplan AS SELECT * FROM testing.csv_data_already_imported;
EXECUTE fooplan;
GET DIAGNOSTICS affected_rows := ROW_COUNT;
RETURN affected_rows;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;