Arrays plpgsql text[]varchar[]数组不工作
我的目的是将表的名称分配到一个数组中,并通过该数组将它们放入Arrays plpgsql text[]varchar[]数组不工作,arrays,postgresql,plpgsql,postgresql-9.2,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 Messda
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;
函数在我看来似乎非常正确,但它不会删除表,在我执行它之后实际上什么也不做。我只是在日志上看到这样一个错误:
Table »t« does not exist.
我也用varchar[]而不是text[]尝试了相同的代码,但也不起作用。如果您有任何帮助,我们将不胜感激。您使用的plpgsql版本是什么?当你询问某件事时,如果你添加这条信息是很方便的 删除表的语法是
drop table [if exists] **name** [CASCADE] [RESTRICT]
t的值看起来不像表的名称
其他可能的解释:
您的函数应该返回void,因此它没有显示任何内容是正确的。你的意思是这些桌子没有被移走吗?您是否首先使用t测试了它,并尝试在其中一个表上进行插入,以确定您试图删除的表是否存在?
执行函数的人是表的所有者吗?有几个错误:
- 不能对字符串文本使用双引号(它用于区分大小写的SQL标识符)
- 对于参数化的DDL语句(语句执行),应该使用动态SQL。DDL语句没有执行计划,并且这些语句不支持参数化(您不应该在那里使用变量) 做$$ 声明 表varchar[]:=ARRAY['t1','t2']; t-varchar; 开始 数组表中的FOREACH t 环 执行格式('删除表%I',t); 端环; 结束; $$;
DROP TABLE WHERE代码>?您可能正在考虑从tbl中删除…
@ErwinBrandstetter您是对的,我只是举了一个例子
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;
$$;