Oracle:功能参数-如何实现?

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 我希望你能帮

我有一个小问题,我想请你帮忙:)

为了简单起见,我使用oracle数据库,我想在我的一个表上创建一个“检查约束”,如下所示

表格XY

属性A | |属性B | |属性C

对于属性A和B,用户可以添加任何他想要的内容-对于属性C,我想使用一个“检查约束”,使用一个用户定义的函数-检查A和B的组合是否有效

我的问题是,我不知道如何实现函数的输入参数,以便在用户在数据库中创建条目时进行检查

换句话说,用户已经将1添加到A3添加到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等等,这是我真正的问题