Siq*_*ira 3 oop oracle types plsql oracle12c
我在 Oracle 模式中有一个类型层次结构:
CREATE OR REPLACE TYPE FV AS OBJECT (
idno NUMBER)
NOT FINAL;
/
CREATE TYPE FV_Integer UNDER FV (
features INTEGER_ARRAY)
NOT FINAL;
/
CREATE TYPE FV_Number UNDER FV (
features NUMBER_ARRAY)
NOT FINAL;
/
Run Code Online (Sandbox Code Playgroud)
我想构建一个 PLSQL 函数来验证哪种类型的层次结构是对象:对于函数虚拟(obj1 FV,obj2 FV)...我如何检查用户正在使用的层次结构的对象类型是什么?
例如,我想打印对象类型名称(该函数用于说明,它不是真正的 pl/sql 代码):
dummy(obj1 FV, obj2 FV){
if obj1%type = FV_INTEGER
THEN print 'FV_INTEGER'
endif
if obj2%type = FV_NUMBER
THEN print 'FV_NUMBER'
endif
}
Run Code Online (Sandbox Code Playgroud)
您可以使用以下命令检查对象的类型sys.anydata
:
create or replace function which_type
( p_fv fv )
return varchar2
as
begin
return sys.anydata.gettypename(sys.anydata.convertobject(p_fv));
end which_type;
Run Code Online (Sandbox Code Playgroud)
测试:
create or replace type number_array as table of number;
create or replace type integer_array as table of integer;
create or replace type fv as object (
idno number)
not final;
/
create type fv_integer under fv (
features integer_array)
not final;
/
create type fv_number under fv (
features number_array)
not final;
/
create table fv_test (my_fv fv);
insert into fv_test values (fv(1));
insert into fv_test values (fv_integer(1, integer_array(1)));
insert into fv_test values (fv_number(1, number_array(1)));
select which_type(my_fv) from fv_test;
WHICH_TYPE(MY_FV)
-------------------------
WILLIAM.FV
WILLIAM.FV_INTEGER
WILLIAM.FV_NUMBER
3 rows selected.
Run Code Online (Sandbox Code Playgroud)