例如,以下是我要完成的任务:
EXECUTE 'SELECT name, address INTO variable1, variable2
FROM employee WHERE id=1';
答案 0 :(得分:1)
EXECUTE 'SELECT name,address from employee where id=1'
INTO variable1, variable2;
最好还使用参数而不是连接值(以防止SQL注入):
l_emp_id := 1;
EXECUTE 'SELECT name,address from employee where id=$1'
INTO variable1, variable2
USING l_emp_id;
答案 1 :(得分:1)
实际上,没有任何迹象表明需要动态SQL。所有标识符都稳定。假设您只想参数化id
值,请简化为:
SELECT name,address from employee where id = $1
INTO variable1, variable2
或者:
SELECT INTO variable1, variable2
e.name, e.address
FROM employee e
WHERE e.id = _my_variable;
手册中的相应章节:"Executing a Query with a Single-row Result"
使用参数化表或列名称时将显示动态SQL Here is a list of related question for dynamic SQL
原始代码无效的原因per documentation:
SELECT INTO
目前不支持
EXECUTE
;代替, 执行普通SELECT
命令并指定INTO
作为其中的一部分EXECUTE
本身。
@a_horse demonstrates valid syntax in his answer.
任一替代方案都依赖于查询来返回单个行。如果你的id被定义为唯一的,那就不会破坏。
答案 2 :(得分:0)
(见this other question for assign value to variable at declaration section)
语言PLpgSQL语法有很多方法可以说:
Y := f(X);
EXECUTE
子句仅用于“动态执行”(性能),
EXECUTE 'f(X)' INTO Y;
使用Y := f(X);
或SELECT
执行静态声明,
SELECT f(X) INTO Y;
在放弃结果时使用PERFORM声明或使用void返回:
PERFORM f(X);