Postgresql源码(112)plpgsql执行sql时变量何时替换为值
在PostgreSQL中,PL/pgSQL中的变量替换为其值发生在SQL语句执行的预处理阶段。具体来说,就是在函数执行到相应的SQL语句执行之前,PL/pgSQL会将语句中的变量替换为其值。
这个替换过程是自动的,无需用户手动干预。例如,如果你有一个PL/pgSQL函数,它包含如下代码:
CREATE OR REPLACE FUNCTION example_func(p_id INT)
RETURNS VOID AS $$
BEGIN
PERFORM * FROM my_table WHERE id = p_id;
END;
$$ LANGUAGE plpgsql;
当函数被调用时,例如使用 SELECT example_func(1);
,函数体内的 p_id
变量会被替换为实际传入的参数值 1
,SQL语句实际执行时会变成 PERFORM * FROM my_table WHERE id = 1;
。
如果你需要动态地构造SQL语句并执行,可以使用 EXECUTE
语句,在这种情况下,变量的值会在执行时替换进去。例如:
DO $$
DECLARE
v_table_name TEXT := 'my_table';
v_sql TEXT;
BEGIN
v_sql := 'SELECT * FROM ' || v_table_name;
EXECUTE v_sql;
END;
$$;
在这个DO语句中,变量 v_table_name
的值会在构造 v_sql
时替换到SQL语句中,然后 EXECUTE
会执行这个语句,实际执行时会变成 SELECT * FROM my_table;
。
评论已关闭