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;
$$;