我可以在哪些数据类型上使用 Oracle PL/SQL RANGE 子句来约束变量?

On which datatypes can I use Oracle PL/SQL RANGE clause to constrain a variable?

我正在尝试弄清楚何时允许在 PL/SQL 块的声明部分的变量定义中使用 RANGE 子句。

以下代码在 Oracle 12c 上测试

这有效...

declare
   l_constrained  PLS_INTEGER  RANGE  7..10 ;
begin
   l_constrained := 9;
end ;
/

这给出了一个编译错误...

declare
   l_constrained  NUMBER(2)  RANGE  7..10 ;
begin
   l_constrained := 9;
end ;
/

它似乎只适用于 PL/SQL 数据类型而不适用于 SQL 数据类型,但这只是我的第一印象。

任何人都可以给我一些信息,并可能带我去 Oracle 的关于 RANGE 子句使用的官方文档吗?我找不到它...

以前从未听说过此功能。

无论如何,这似乎被称为 "constrained subtype" 并且仅适用于 PLS_INTEGER 和子集。

The only base types for which you can specify a range of values are PLS_INTEGER and its subtypes (both predefined and user-defined).

https://docs.oracle.com/database/121/LNPLS/datatypes.htm#CHDBBCIE

文档没有明确提及 RANGE 在子类型声明之外的用法,但我猜它在某种程度上与将变量声明为 NUMBER(8,2) 属于同一类别,即声明带有对 a 的约束类型。