gpt4 book ai didi

sql - 创建表时在 SQL 中断言某些条件的最佳实践?

转载 作者:行者123 更新时间:2023-11-29 12:10:33 25 4
gpt4 key购买 nike

假设我创建了一些表:

CREATE TABLE mytable AS
...

现在我想进行一些健全性检查,验证 mytable 的每条记录的某些条件是否为真。 我可以将这个问题描述为检查另一个查询的结果是否返回零结果。

SELECT count(*)
FROM mytable
WHERE something_horrible_is_true

如果计数不为零,是否有标准的推荐方法在此处生成错误?为了让事情发生,如果我使用 java.sql.Statement 执行此健全性检查查询,则会触发 SQLException?

这是一个合理的方法吗?或者这是一种更好的方法来强制某些条件在创建表时始终为真? (我使用 Postgresql。)

最佳答案

创建引发异常的函数:

create or replace function raise_error(text) returns varchar as $body$
begin
raise exception '%', $1;
return null;
end; $body$ language plpgsql volatile;

然后您可以在常规 SQL 中使用它:

SELECT case when count(*) > 0 then raise_error('something horrible is true!') end
FROM mytable
WHERE something_horrible_is_true

如果有满足 something_horrible_is_true 条件的行,您将在此处获得 SQL 异常。

还有几个更复杂的用法示例:

SELECT 
case
when count(*) = 0 then raise_error('something horrible is true!')::int
else count(*)
end
FROM mytable
WHERE something_horrible_is_true

没有找到时返回计数或上升异常。

update mytable set
mydatefield =
case
when mydatefield = current_date then raise_error('Can not update today''s rows')::date
else '1812-10-10'::date
end;

防止更新某些行(这是一个有点做作的例子,但它显示了另一种使用方式)
...等等。

关于sql - 创建表时在 SQL 中断言某些条件的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38084441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com