Vla*_*nov 63 sql postgresql if-statement plpgsql
我如何在Postgres中进行此类查询?
IF (select count(*) from orders) > 0
THEN
DELETE from orders
ELSE
INSERT INTO orders values (1,2,3);
Run Code Online (Sandbox Code Playgroud)
Erw*_*ter 115
尝试:
DO
$do$
BEGIN
IF EXISTS (SELECT FROM orders) THEN
DELETE FROM orders;
ELSE
INSERT INTO orders VALUES (1,2,3);
END IF;
END
$do$
Run Code Online (Sandbox Code Playgroud)
标准SQL中没有过程元素.该IF语句是默认过程语言PL/pgSQL的一部分.您需要使用该DO命令创建函数或执行ad-hoc语句.
;在plpgsql中的每个语句的末尾都需要一个(最后的除外END).
你需要END IF;在IF声明的最后.
子选择需要用括号括起来:
IF (SELECT count(*) FROM orders) > 0 ...
Run Code Online (Sandbox Code Playgroud)
要么:
IF (SELECT count(*) > 0 FROM orders) ...
Run Code Online (Sandbox Code Playgroud)
但这相当且快得多:
IF EXISTS (SELECT FROM orders) ...
Run Code Online (Sandbox Code Playgroud)SELECT在这里你根本不需要额外的.这样做也快一点:
DO
$do$
BEGIN
DELETE FROM orders;
IF NOT FOUND THEN
INSERT INTO orders VALUES (1,2,3);
END IF;
END
$do$
Run Code Online (Sandbox Code Playgroud)
Mah*_*ood 26
只是为了帮助,如果有人偶然发现像我这样的问题,如果你想在PostgreSQL中使用if,你使用"CASE"
select
case
when stage = 1 then 'running'
when stage = 2 then 'done'
when stage = 3 then 'stopped'
else
'not running'
end as run_status from processes
Run Code Online (Sandbox Code Playgroud)
来自文档
IF boolean-expression THEN
statements
ELSE
statements
END IF;
Run Code Online (Sandbox Code Playgroud)
因此,在上面的示例中,代码应如下所示:
IF select count(*) from orders > 0
THEN
DELETE from orders
ELSE
INSERT INTO orders values (1,2,3);
END IF;
Run Code Online (Sandbox Code Playgroud)
你错过了:END IF;
您还可以将PL / pgSQL CASE的基本结构与匿名代码块过程块一起使用:
DO $$ BEGIN
CASE
WHEN boolean-expression THEN
statements;
WHEN boolean-expression THEN
statements;
...
ELSE
statements;
END CASE;
END $$;
Run Code Online (Sandbox Code Playgroud)
参考文献:
| 归档时间: |
|
| 查看次数: |
157640 次 |
| 最近记录: |