Oracle:功能参数-如何实现?
我有一个小问题,我想请你帮忙:) 为了简单起见,我使用oracle数据库,我想在我的一个表上创建一个“检查约束”,如下所示 表格XY 属性A | |属性B | |属性C 对于属性A和B,用户可以添加任何他想要的内容-对于属性C,我想使用一个“检查约束”,使用一个用户定义的函数-检查A和B的组合是否有效 我的问题是,我不知道如何实现函数的输入参数,以便在用户在数据库中创建条目时进行检查 换句话说,用户已经将1添加到A和3添加到B,并且一旦他想要添加C的条目,我想(例如)检查A+B=4 我希望你能帮助我,因为我现在快发疯了 问候 亚历克斯 编辑(从下面的评论中复制) 我有三张桌子:Oracle:功能参数-如何实现?,oracle,user-defined-functions,check-constraint,Oracle,User Defined Functions,Check Constraint,我有一个小问题,我想请你帮忙:) 为了简单起见,我使用oracle数据库,我想在我的一个表上创建一个“检查约束”,如下所示 表格XY 属性A | |属性B | |属性C 对于属性A和B,用户可以添加任何他想要的内容-对于属性C,我想使用一个“检查约束”,使用一个用户定义的函数-检查A和B的组合是否有效 我的问题是,我不知道如何实现函数的输入参数,以便在用户在数据库中创建条目时进行检查 换句话说,用户已经将1添加到A和3添加到B,并且一旦他想要添加C的条目,我想(例如)检查A+B=4 我希望你能帮
组
包括组的ID
,组列表
是组
和TM
之间的连接表-因此在组列表
中,我将组
与TM连接-但可以将1个组
与多个TM
的f.e:
GROUPID || TM
1 || 1
1 || 2
1 || 3
2 || 1
以此类推,我真正的问题是:现在,我想检查TM属性,它检查我试图填充的TM是否已经存在于同一个GROUPID中。我希望现在清楚我的意图是什么…如果使用ouf of line check constraint语法,您可以使用特定表的任何字段定义条件,例如:
ALTER TABLE xy ADD CONSTRAINT mymulticheck CHECK (A + B = C);
请注意,对于这种类型的约束,例如,您不能使用用户定义的函数,很明显,所有行的条件都是固定的和相同的。如果使用ouf的行检查约束语法,您可以使用特定表的任何字段定义条件,例如:
ALTER TABLE xy ADD CONSTRAINT mymulticheck CHECK (A + B = C);
请注意,对于这种类型的约束,例如,您不能使用用户定义的函数,很明显,所有行的条件都是固定的和相同的。要求用户为特定列输入“正确”值似乎毫无意义。与其将
C
定义为普通列,我建议将其定义为计算列,例如:
CREATE TABLE TBL
(A NUMBER,
B NUMBER,
C AS (A + B));
这样,C的计算总是正确的
祝你好运
编辑
根据OP在下面评论中提供的信息,这个答案似乎没有解决实际需要,所以我添加了第二个答案(如下)。我曾考虑删除这个答案,但因为它包含了OP的评论,添加了重要信息(后来我将其编辑到问题中),所以我决定保留这个答案,但是,通过在社区Wiki上创建此答案来放弃代表性收益。要求用户为特定列输入“正确”值似乎毫无意义。与其将
C
定义为普通列,我建议将其定义为计算列,例如:
CREATE TABLE TBL
(A NUMBER,
B NUMBER,
C AS (A + B));
这样,C的计算总是正确的
祝你好运
编辑
根据OP在下面评论中提供的信息,这个答案似乎没有解决实际需要,所以我添加了第二个答案(如下)。我曾考虑删除这个答案,但因为它包含了OP的评论,添加了重要信息(后来我将其编辑到问题中),所以我决定保留这个答案,但是,如果要通过创建此回答社区Wiki来放弃代表收益。根据OP提供的新信息,解决此问题的正确方法似乎是向GROUP_列表表添加唯一约束,以确保GROUP_ID和TM的组合是唯一的:
ALTER TABLE GROUP_LIST
ADD CONSTRAINT GROUP_LIST_UNIQUE_1
UNIQUE (GROUP_ID, TM);
祝您好运。根据OP提供的新信息,解决此问题的正确方法似乎是向GROUP_列表添加唯一约束,以确保GROUP_ID和TM的组合是唯一的:
ALTER TABLE GROUP_LIST
ADD CONSTRAINT GROUP_LIST_UNIQUE_1
UNIQUE (GROUP_ID, TM);
祝你好运。你的问题不是很清楚。您要执行的检查是什么?C栏的作用是什么?你所说的“一旦他想为C添加一个条目来检查A+B=4”是什么意思?该表有3个属性-A、B和C如果用户添加了一个新条目-并且已经填写了A和B,对C的检查应该检查“A+B=4”-否则他应该拒绝属性C上的条目-例如第一个条目:A=1,B=3,(对C的检查是正确的;A+B=4!)C=7第二个条目:A=2,B=3,(对C的检查是不正确的;A+B!=4!)C=(空[无条目可能的双重检查])您的问题不是很清楚。您想要执行的检查是什么?C列的作用是什么?您所说的“一旦他想要为C添加条目以检查A+B=4”是什么意思。该表有3个属性-A、B和C如果用户添加了一个新条目-并且已经填写了A和B,对C的检查-应该检查“A+B=4”-否则他应该拒绝属性C上的条目-例如第一个条目:A=1,B=3,(对C的检查正常;A+B=4!)C=7第二个条目:A=2,B=3,(对C的检查不正常;A+B!=4!)C=(空[无输入可能的双重检查])注:计算tu NULL的值始终接受整个条件,因此在您的场景中,只要C在一行中保持NULL,您就可以在同一行的a和B上自由插入任何值。是的,好的-可能需要解释我的需要更详细。我有3个表:1.组2.组列表3.TM所以组包括组的ID,组_LIST是组和TM之间的可连接表-因此在GROUP|u LIST中,我将一个组与TM连接-但是可以将一个组与多个TM连接,例如:GROUPID | | | TM 1 | | 1 | | 2 | | | 1等等,这是我真正的问题