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

数组 – plpgsql text [] varchar []数组不起作用,第1张

概述我的目的是将表的名称分配到一个数组中,并通过此数组将它们放入foreach循环中. 我实际上尝试做一些更复杂的事情,但在我尝试使用以下代码之前: CREATE OR REPLACE FUNCTION delete_auto() RETURNS void AS$BODY$DECLAREt text;tbl_array text[] = array["ID: 889197824 CH: 00 我的目的是将表的名称分配到一个数组中,并通过此数组将它们放入foreach循环中.

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

CREATE OR REPLACE FUNCTION delete_auto()  RETURNS voID AS$BODY$DECLAREt 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 LOOPDROP 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 []但不能正常工作.任何帮助,将不胜感激

解决方法 有一些错误:

>您不能对字符串文字使用双引号(它用于区分大小写的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;$$;
总结

以上是内存溢出为你收集整理的数组 – plpgsql text [] varchar []数组不起作用全部内容,希望文章能够帮你解决数组 – plpgsql text [] varchar []数组不起作用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1049403.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存