如何在触发器函数的plpgsql过程中使用多个别名?

博士

我找到了有关此主题的许多信息,但是我无法真正利用其功能。

我在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;

现在如何为以下项设置别名:

  1. 'products'由别名表示的表的名称tblname

  2. 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在触发器调用的过程中使用COMMIT

如何在触发器或存储过程中使用两个更新语句

如何访问将在触发器中使用的存储过程中的列?| PostgreSQL的

如何在 blob 触发器 Azure 函数中使用 Python 打开 blob 触发的文件

如何在一个SQL触发器中使用多个事件?

如何在React Native中使用onPress触发器停止setInterval函数

如何在 Java Azure 函数中使用事件中心触发器

PLPGSQL函数返回触发器AND值

在单个命令中使用多个别名

如何在SQLite触发器中使用WITH子句

如何在触发器中使用计数?

如何在sql触发器中使用where子句?

如何在MYSQL触发器中使用IF语句?

如何在触发器中使用 CHECKSUM

如何在不使用视图、函数、触发器或过程的情况下在计算列上创建表 case 语句?

错误代码:1111。无效使用存储过程中的组函数来自动创建触发器

使用 mariabackup 备份触发器、函数和存储过程

如何在触发器函数中使用json字符串元素而不将其声明为变量

如何在触发器之后调用使用相同表的过程

如何在SAM模板中为lambda函数定义多个触发器?

使用存储过程中的值更新触发器中的表

使用触发器和存储过程中的值将值插入表中

如何使用触发器调用过程

触发器在执行过程中遇到错误

在存储过程中创建触发器

当您有多个模式时,如何在存储过程中使用模式映射?

如何在MySQL * Prepared *存储过程中使用多个参数

如何在存储过程中使用多个select语句作为Resultset中的列

如何在postgres中的order by子句中使用两个别名的总和?