用户定义类型 Oracle 中的检查约束

Check constraint in User Defined Type Oracle

我需要创建一个只能容纳长度在 8 到 13 个字符之间的正数的类型。我能想到的最好的是这个,但它不起作用:

CREATE OR REPLACE TYPE TYPE1 AS OBJECT (
TYPE1 NUMBER (13)
) FINAL;


CREATE TABLE table1(
someNumber TYPE1
check ( someNumber between 11111111 and 9999999999999)
)

正在寻找一种方法,如果可能的话,向 UDT 添加约束。

您必须使用对象的列名

CREATE TABLE table1
  (
    someNumber TYPE1 
    CHECK (someNumber.TYPE1 BETWEEN 11111111 AND 9999999999999)
  );

DEMO

最接近的做法是在类型的构造函数或方法中编写一些验证代码。但是,这不会阻止 someNumber 被显式设置。 没有事件可以捕获相当于 table 约束或触发器的事件,除非该对象当然用于 table,在这种情况下,您可以在 table 上定义约束, 但这些将独立于类型定义。