动态执行

最近更新时间: 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命令执行