带有if语句的Oracle自构造函数

带有if语句的Oracle自构造函数,oracle,plsql,Oracle,Plsql,我的问题是,因为我是oracle和pl/sql的新手,所以在插入过程中是否可以使用自构造函数检查值。 根据另一个属性值检查varray项目数的示例 Create or Replace Type test_arr as Varray(20) of number; Create or Replace Type test_typ as Object( tID number(5), tType varchar2(1), tArray test_arr ); 我想测试tType='A'那么tArray

我的问题是,因为我是oracle和pl/sql的新手,所以在插入过程中是否可以使用自构造函数检查值。 根据另一个属性值检查varray项目数的示例

Create or Replace Type test_arr as Varray(20) of number;

Create or Replace Type test_typ as Object(
tID number(5),
tType varchar2(1),
tArray test_arr
);
我想测试tType='A'那么tArray.count什么时候应该小于2,如果tType='B'那么tArray.count应该在5到20之间。 我想在插入过程中对此进行测试,以便:

Create Table test_tbl of test_typ;
Insert Into test_tbl Values(187,'A',test_arr(1,6,7)); /*This should give an error and not insert the record as the tType is 'A' and the tArray has 3 values!*/
我不确定我是否能通过自我回归做到这一点。这里的主要问题是,我需要在插入过程中进行检查


我会请求任何帮助。谢谢

这可以使用触发器来完成

create trigger instrg BEFORE INSERT ON test_tbl
FOR EACH ROW
BEGIN
    IF  :NEW.tType = 'A' AND :NEW.tArray.COUNT >= 2 then  
       RAISE_APPLICATION_ERROR(-20001, 'error 1');
    ELSIF  :NEW.tType = 'B' AND  :NEW.tArray.COUNT NOT BETWEEN 5 AND 20 then
        RAISE_APPLICATION_ERROR(-20001, 'error 2');
    END IF;
END;

查看
if-else
条件,我认为您很容易理解存在哪些条件,如果需要,您还可以修改它们。

这可以使用触发器来完成

create trigger instrg BEFORE INSERT ON test_tbl
FOR EACH ROW
BEGIN
    IF  :NEW.tType = 'A' AND :NEW.tArray.COUNT >= 2 then  
       RAISE_APPLICATION_ERROR(-20001, 'error 1');
    ELSIF  :NEW.tType = 'B' AND  :NEW.tArray.COUNT NOT BETWEEN 5 AND 20 then
        RAISE_APPLICATION_ERROR(-20001, 'error 2');
    END IF;
END;

查看
if-else
条件,我认为您很容易理解存在哪些条件,如果需要,您也可以修改它们。

是的,我知道if条件。我使用一个过程完成了这个任务,并用declare begin call_procedure()end stuff调用它,但我只需要在sql中使用它。事实上我不知道这会触发什么,所以我会看看。tnxI已经试过了扳机。正是我需要的。它与我在这里设置的其他限制完美地结合在一起。非常感谢你!是的,我知道情况如何。我使用一个过程完成了这个任务,并用declare begin call_procedure()end stuff调用它,但我只需要在sql中使用它。事实上我不知道这会触发什么,所以我会看看。tnxI已经试过了扳机。正是我需要的。它与我在这里设置的其他限制完美地结合在一起。非常感谢你!类型构造函数在这里没有帮助。首先,您只能添加构造函数,而不能更改默认构造函数,因此您的自定义验证构造函数必须具有除
(tID、tType、tArray)
以外的签名。其次,
insert
插入到对象表的关系表示中不会调用其类型的构造函数。首先,您只能添加构造函数,而不能更改默认构造函数,因此您的自定义验证构造函数必须具有除
(tID、tType、tArray)
以外的签名。其次,
insert
插入到对象表的关系表示中不会调用其类型的构造函数。