我找到了有关此主题的许多信息,但是我无法真正利用其功能。
我在PostsgreSQL 9.6.0中创建了一个触发函数,当我使用静态变量时可以正常工作。无论如何,因为我或其他人以后会使用该脚本,所以我想通过更改文档开头所需的变量来使其尽可能容易地适应新的环境。我的函数的结构可以用以下方式描述:
CREATE OR REPLACE FUNCTION userinput()
RETURNS TRIGGER AS
$func$
DECLARE
tblname TEXT := 'products';
trgtcol TEXT := 'col1, col2, col4';
BEGIN
SELECT trgtcol FROM tblname;
END;
$func$ language plpgsql;
现在如何为以下项设置别名:
'products'
由别名表示的表的名称tblname
?
select语句后的列数不同吗?
我知道上面的代码不起作用,但是使用提供的声明,我希望得到以下结果:
SELECT col1, col2, col4 FROM products
您需要动态SQL。为了防止SQL注入,请使用以下命令:
DECLARE
tblname text := 'products';
trgtcol text := 'col1, col2, col4';
sanitized_col text;
BEGIN
/* convert the columns to something safe */
SELECT string_agg(
quote_ident(c.name),
', '
) INTO sanitized_col
FROM regexp_split_to_table(trgtcol, ', *') AS c(name);
EXECUTE format('SELECT %s FROM %I', sanitized_col, tblname)
INTO ...
END;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句