Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在postgresql触发器中循环表_Postgresql - Fatal编程技术网

在postgresql触发器中循环表

在postgresql触发器中循环表,postgresql,Postgresql,我正试图根据其他表在表上构建触发器。所以在我有了这样的东西之后 在触发器中: begin table_name=select (...) from information schema ; execute format('some stuff for i in select ... loop insert into table (...) select (...) from %I end loop',table) 但在触发触发器时,我会出现以下错误: S

我正试图根据其他表在表上构建触发器。所以在我有了这样的东西之后 在触发器中:

begin

table_name=select (...) from information schema ;

execute format('some stuff 

    for i in select ... loop

    insert into table (...) select (...) from %I

    end loop',table)  
但在触发触发器时,我会出现以下错误:

SQL错误[42601]:错误:«FOR»上或附近的语法错误

我不明白为什么会有任何想法?

使用
EXECUTE
(动态SQL)只能执行SQL语句。您正在尝试执行PL/pgSQL块

您有三种选择:

  • 查询字符串仅包含
    INSERT
    语句,循环为常规SQL

  • 查询字符串是包含整个块的
    DO
    SQL语句

  • 与其为循环编写
    ,不如编写动态语句,如

    INSERT INTO ...
    SELECT ... FROM %I
    

非常感谢。我将执行格式传递到循环中,它开始工作:从
executeformat('for…loop insert to…select from%I end loop',table_name)
更改为
for。。。循环执行格式(“插入到…从%I中选择”,表名称)结束循环