gpt4 book ai didi

sql - 如何在CHECK语句中调用PL SQL函数?

转载 作者:行者123 更新时间:2023-12-02 07:16:55 25 4
gpt4 key购买 nike

我想添加一个CHECK语句,当在表中插入新条目时调用该函数。
我使用以下示例代码来实现这种功能:

CREATE TABLE customers(
id NUMBER NOT NULL,
PRIMARY KEY(id));

CREATE OR REPLACE FUNCTION totalCustomers
RETURN NUMBER IS
total NUMBER := 0;
BEGIN
SELECT count(*) into total
FROM customers;

RETURN total;
END;
/

ALTER TABLE customers
ADD CHECK (totalCustomers() < 10);

当我在 livesql.oracle.com中运行此查询时,出现以下错误:
ORA-00904: "TOTALCUSTOMERS": invalid identifier

在check语句中调用此函数的正确方法是什么?

附言请忽略该函数的内容。稍后,我将其替换为所需的内容。

最佳答案

没有一个。
直接来自Oracle文档:
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/constraint.html#GUID-1055EA97-BA6F-4764-A15F-1024FD5B6DFE

Conditions of check constraints cannot contain the followingconstructs:

.............

  • Calls to user-defined functions

..............


现在:您说“忽略函数的实际内容”。那不是健康的态度;内容也很重要。一方面,该函数无论如何都必须是确定性的(您不是)-这是一个问题,除了它是用户定义的函数之外。而且,约束中的条件只能引用单行中的值-不能像您一样是“表”约束。
那么,您可能想知道-如何实现像您这样的“约束”?一种比较常见的方法是基于“选择count(*).....”创建实例化 View ,并对MV施加约束。 MV应该在提交时刷新完整。每当您修改基表并提交时。 MV会刷新-如果计数增加到10以上,则会回滚更改。

关于sql - 如何在CHECK语句中调用PL SQL函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60472566/

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