Postgresql 如何在plpgsql中运行动态查询时访问找到的
我已将proc存储在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
调用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;
$$