使用子类型¶
目前PL/SQL中支持的子类型操作包括:
- 子类型嵌套,嵌套时会对约束进行继承。
- 通过INTO语句更新子类型数据。
- 基类型更改,子类型值集随基类型更改。
示例:使用子类型¶
-- 子类型嵌套
DECLARE
SUBTYPE My_Subtype_0 IS char(4);
SUBTYPE My_Subtype0 IS My_Subtype_0;
SUBTYPE My_Subtype1 IS My_Subtype0;
a1 My_Subtype1;
BEGIN
a1 :='abcd';
DBMS_OUTPUT.PUT_LINE(a1);
END;
/
DECLARE
SUBTYPE My_Subtype_0 IS char(4) NOT NULL;
SUBTYPE My_Subtype0 IS My_Subtype_0;
SUBTYPE My_Subtype1 IS My_Subtype0;
a1 My_Subtype1;
BEGIN
a1 := NULL;
END;
ERROR, SUBTYPE 声明为 NOT NULL 的变量必须有初始化赋值
#1: at Program line 4 (a1 My_Subtype1;)
/
-- 通过INTO语句更新子类型数据
DECLARE
SUBTYPE My_Subtype1 IS int;
a1 My_Subtype1;
a2 My_Subtype1;
c VARCHAR(30);
BEGIN
a1 :=1;
select a1 into a2 from dual;
select a2 into c from dual;
DBMS_OUTPUT.PUT_LINE(c);
END;
/
-- 基类型更改,子类型值集随基类型更改
DROP PACKAGE pack1;
DROP PACKAGE pack2;
create or replace package PACK1 as
SUBTYPE subt1 is char(4);
tety1 subt1;
function func(a1 int) return subt1;
end PACK1;
/
create or replace package body PACK1 as
function func(a1 int) return subt1 AS
BEGIN
return null;
END func;
end PACK1;
/
create or replace package PACK2 as
tety2 PACK1.subt1;
function func(a1 VARCHAR) return VARCHAR;
end PACK2;
/
create or replace package body PACK2 as
function func(a1 VARCHAR) return VARCHAR AS
c varchar;
BEGIN
tety2 := a1;
select tety2 into c;
return c;
END func;
end PACK2;
/
select pack2.func(1) from dual;
FUNC(varchar) |
-------------------
1 |
总数目:1
select pack2.func('abc') from dual;
FUNC(varchar) |
-------------------
abc |
总数目:1
create or replace package PACK1 as
SUBTYPE subt1 is int;
tety1 subt1;
function func(a1 int) return subt1;
end PACK1;
/
create or replace package body PACK1 as
function func(a1 int) return subt1 AS
BEGIN
return null;
END func;
end PACK1;
/
select pack2.func(1) from dual;
FUNC(varchar) |
-------------------
1 |
总数目:1
select pack2.func('abc') from dual;
ERROR, 错误的数值格式 'abc'
DROP PACKAGE pack1;
DROP PACKAGE pack2;