执行SELECT语句并丢弃PL / pgSQL中的结果

时间:2012-03-12 10:03:12

标签: function postgresql stored-procedures execute plpgsql

我试图在PostgreSQL中创建一个简单的存储过程,我想在其中执行SELECT语句。我不想返回select语句的结果。

如果我直接使用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;

因此我使用PREPARE .. 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命令。我想知道的是如何在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;

1 个答案:

答案 0 :(得分:3)

您需要PERFORM“在postgresql存储过程中执行SELECT语句,而无需返回其结果”。

否则你的问题是PL / pgSQL的命令EXECUTE与SQL命令EXECUTE不同。