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

Max*_*Max 5 oracle plsql range variable-declaration

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

以下代码在Oracle 12c上进行了测试

这有效......

declare
   l_constrained  PLS_INTEGER  RANGE  7..10 ;
begin
   l_constrained := 9;
end ;
/
Run Code Online (Sandbox Code Playgroud)

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

declare
   l_constrained  NUMBER(2)  RANGE  7..10 ;
begin
   l_constrained := 9;
end ;
/
Run Code Online (Sandbox Code Playgroud)

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

有人可以给我一些信息,并可能请我转到Oracle关于使用RANGE条款的官方文档吗?我找不到它了...

Tim*_*ler 4

以前从未听说过这个功能。

不管怎样,这似乎被称为“受限子类型”并且仅适用于PLS_INTEGER和 子集。

唯一可以指定值范围的基本类型是 PLS_INTEGER 及其子类型(预定义的和用户定义的)。

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

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