【发布时间】:2012-01-07 04:01:18
【问题描述】:
我有一个总是有 0 或 1 行的表。我想编写一个脚本,如果它是空的,它将插入一行,如果有一行则什么都不做。我试过这个:
SELECT * CASE WHEN (SELECT COUNT(*) FROM table < 0)
THEN (INSERT INTO table (a, b, c, d) VALUES ('a', 'b', 'c', 'd'))
END CASE
FROM table;
但我明白了:
在预期的地方找不到 FROM 关键字。
这看起来应该很简单我做错了什么?
【问题讨论】:
-
注意 如果您没有设置其他约束。两个单独的会话都可以查询您的表,发现它为空,然后插入一行,每个会话产生两行。为了防止这种情况发生,请在表上设置一个主键,并为该 PK 分配一个检查约束,以便它只能有一个值:
create table t (PK number constraint t_pk primary key constraint T_CK1 check (PK = 1) . . .)