Postgresql 如何在plpgsql中运行动态查询时访问找到的

Postgresql 如何在plpgsql中运行动态查询时访问找到的,postgresql,amazon-redshift,plpgsql,Postgresql,Amazon Redshift,Plpgsql,我已将proc存储在plpgsql中的红移中。 当我运行调用test3()时,我得到异常 无效操作:行计数:1; 1条语句失败。 但是当我运行调用test4()时 0行受影响 呼叫成功执行 如何在执行动态查询时访问find您不能,但可以检查find\u record是否为空。您不能,但可以检查find\u record是否为空。动态SQL对find变量没有影响。但您可以使用GET DIAGNOSTICS语句。您可以在示例中这样做: CREATE OR REPLACE PROCEDURE tes

我已将proc存储在plpgsql中的红移中。 当我运行
调用test3()
时,我得到异常 无效操作:行计数:1; 1条语句失败。

但是当我运行
调用test4()

0行受影响 呼叫成功执行


如何在执行动态查询时访问find

您不能,但可以检查
find\u record
是否为空。

您不能,但可以检查
find\u record
是否为空。

动态SQL对
find
变量没有影响。但您可以使用
GET DIAGNOSTICS
语句。您可以在示例中这样做:

CREATE OR REPLACE  PROCEDURE test4()
LANGUAGE plpgsql
AS $$
DECLARE
   found_record RECORD;
   integer_var integer;
BEGIN
  EXECUTE  'SELECT *  FROM tbl WHERE id=\'ABC\'' into found_record ;
  GET DIAGNOSTICS integer_var = ROW_COUNT;
  RAISE EXCEPTION 'Row Count: %', integer_var;
END;
$$

您可以在任何地方使用
GET DIAGNOSTICS
语句,而不仅仅是在
FOUND
为true时。动态SQL对
FOUND
变量没有影响。但您可以使用
GET DIAGNOSTICS
语句。您可以在示例中这样做:

CREATE OR REPLACE  PROCEDURE test4()
LANGUAGE plpgsql
AS $$
DECLARE
   found_record RECORD;
   integer_var integer;
BEGIN
  EXECUTE  'SELECT *  FROM tbl WHERE id=\'ABC\'' into found_record ;
  GET DIAGNOSTICS integer_var = ROW_COUNT;
  RAISE EXCEPTION 'Row Count: %', integer_var;
END;
$$
您可以在任何地方使用
GET DIAGNOSTICS
语句,而不仅仅是在
FOUND
为true时

CREATE OR REPLACE  PROCEDURE test4()
LANGUAGE plpgsql
AS $$
DECLARE
   found_record RECORD;
   integer_var integer;
BEGIN
  EXECUTE  'SELECT *  FROM tbl WHERE id=\'ABC\'' into found_record ;
  GET DIAGNOSTICS integer_var = ROW_COUNT;
  RAISE EXCEPTION 'Row Count: %', integer_var;
END;
$$