plpgsql text [] varchar []数组不起作用

mct*_*una 4 arrays postgresql plpgsql postgresql-9.2

我的目的是将表的名称分配到一个数组中,然后foreach通过这个数组将它们放入循环中.

我实际上尝试做一些更复杂的事情,但在我尝试使用以下代码之前:

CREATE OR REPLACE FUNCTION delete_auto()
  RETURNS void AS
$BODY$DECLARE
t text;
tbl_array text[] = array["ID: 889197824 CH: 0006 Messdaten2","ID: 889197824 CH: 0006 Messdaten3","ID: 889197824 CH: 0006 Messdaten4"];
BEGIN 

FOREACH t IN ARRAY tbl_array LOOP
DROP TABLE t;
END LOOP;
END; $BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION delete_auto()
  OWNER TO postgres;
Run Code Online (Sandbox Code Playgroud)

函数在我看来非常正确,但它不会丢弃表,在执行它之后实际上什么也没做.我刚刚在日志中出现这样的错误:

Table »t« does not exist. 
Run Code Online (Sandbox Code Playgroud)

我也尝试使用varchar []代替text []但不能正常工作.任何帮助,将不胜感激

Pav*_*ule 14

有一些错误:

  • 您不能对字符串文字使用双引号(它用于区分大小写的SQL标识符)

  • 您应该将动态SQL用于参数化DDL语句(语句EXECUTE).DDL语句没有执行计划,这些语句不支持参数化(你不应该在那里使用变量)

    DO $$
    DECLARE
      tables varchar[] := ARRAY['t1','t2'];
      t varchar;
    BEGIN
      FOREACH t IN ARRAY tables
      LOOP
        EXECUTE format('DROP TABLE %I', t);
      END LOOP;
    END;
    $$;