PostgreSQLでSELECT文を実行したい単純なストアドプロシージャを作成しようとしています。 select文の結果を返す必要はありません。SELECT文を実行してPL/pgSQLで結果を破棄します
私が直接、次のコードのようなSELECT文を使用している場合は、私は
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 ... PREPAREを使用します。この方法を使用
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コマンドであるとみなされるべきではありません。私が知りたいのは、結果を返すことなく、PostgreSQLストアドプロシージャ内でSELECT文を実行する方法だけです。次のようにストアドプロシージャの完全な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;