动态执行
最近更新时间: 2025-02-18 16:02:00
postgres=# CREATE OR REPLACE PROCEDURE p_execute() AS
$$
DECLARE
v_sql TEXT;
v_relname TEXT;
BEGIN
v_sql := 'SELECT relname FROM pg_class limit 1';
EXECUTE v_sql INTO v_relname;
RAISE NOTICE 'relname = %',v_relname;
END;
$$
LANGUAGE plpgsql;
CREATE PROCEDURE
postgres=# CALL p_execute();
NOTICE: relname = pg_stat_statements
CALL
postgres=#
#也可以使用immediate
postgres=# CREATE OR REPLACE PROCEDURE p_execute() AS
$$
DECLARE
v_sql TEXT;
v_relname TEXT;
BEGIN
v_sql := 'SELECT relname FROM pg_class limit 1';
EXECUTE immediate v_sql INTO v_relname;
RAISE NOTICE 'relname = %',v_relname;
END;
$$
LANGUAGE plpgsql;
CREATE PROCEDURE
postgres=# CALL p_execute();
NOTICE: relname = s1
CALL
postgres=#
#动态执行就是拼sql语句,然后使用EXECUTE命令执行