EXECUTE语句¶
EXECUTE语句用来执行动态sql查询。动态查询是那些涉及的表、字段、数据类型可以动态改变的查询。
语法:
execute ::=
参数:
query_string 生成text类型字串的表达式,该字串包含了要执行的SQL语句。该字串的文本将被传给SQL引擎。EXECUTE可以执行的SQL操作包括SELECT、INSERT、UPDATE、DELETE以及那些不可优化语句(例如CREATE TABLE、CREATE FUNCTION等等)。
说明:
在query_string中不会发生任何PLOSCAR变量代换。变量的数值必须在构造查询字串时插入该字串。
和所有其它在PLOSCAR里的查询不同,一个由EXECUTE语句运行的查询在会话生命期中并不只规划和保存一次。在该语句每次运行时,查询都会准备一次。query_string可以在过程里动态地生成以便对不同的表和字段进行操作。
来自SELECT查询的结果被EXECUTE抛弃,并且目前EXECUTE中还不支持SELECT INTO语句。因此,从一个动态创建的SELECT里得到结果的唯一方法是使用在前面描述的FOR-IN-EXECUTE语句。
示例:
create table authors(title varchar(32), age integer);
insert into authors values('flybird', 22);
create or replace procedure myexec as
field varchar(128);
begin
field = 'AGE';
execute 'update authors set ' || quote_ident(field) || '=' ||
quote_literal(23) || ';';
end;
/
-- test the function author_provinceselect * from authors;
exec myexec;
select * from authors;
drop procedure myexec;
--执行结果为:
TITLE | AGE
---------+-----
flybird | 23
(1 row)
以上例子显示了系统函数quote_ident(TEXT)和quote_literal(TEXT)的使用。表示字段名、表名标识符的字符串变量应该通过quote_ident()转换成字符串,而表示动态查询字串文本元素的变量应该通过quote_literal()转换成字符串。