最终目的:生成查询,如果表存在,则执行该表的语句
我尝试只在模式中存在某个表时执行PSQL(9.6)语句,但每次尝试使用条件IF
时,它总是返回语法错误。
我的问题是...
IF EXISTS(SELECT 1 FROM information_schema.tables WHERE table_name = 'users') THEN
SELECT * FROM users;
END IF;
输出结果是...
ERROR: syntax error at or near "IF"
LINE 1: IF EXISTS(SELECT 1 FROM information_schema.tables WHERE tabl...
^
- 没有比这更多的代码 *。我尝试的所有替代方案都失败了。
4条答案
按热度按时间xhv8bpkk1#
你可以(而且很可能必须)将其 Package 在一个函数中。
如果你打电话
当表不存在时,得到空集。
创建表,再次调用它,您将获得表的内容。
但是你不能从外部区分,仅仅通过调用函数,如果你得到一个空集,因为表不存在或者因为它是空的。那么您必须
RAISE
一个错误(但是如果您希望这样,您可以使用一个普通的SELECT
,如果目标表不存在,它就会发出嘎嘎声)。并且表必须具有预期的列。否则,函数中的
SELECT
将失败。注意:如果你实际上不想返回查询结果,而是执行一个DML(或者DDL也可以),你也可以把它放在一个匿名块中,而不定义一个函数。示例:
m2xkgtsf2#
要使用query而不是function来实现这一点,下面是SQL代码:
在else而不是1中,可以将你的语句for“execute a statement”
t1qtbnec3#
你可以试试下面的代码:
然而,如果你提供你完整的块/目的,它将有助于给你一个更好的结果。
更新查询:
不带表和带有效表运行时的结果:
----没有table
----(830行受影响)
ahy6op9u4#
试试这个解决方案: