Oracle 是生成异常的类型
我读过,我希望它会返回TRUE、FALSE或NULL 我有两种对象类型:Oracle 是生成异常的类型,oracle,plsql,user-defined-types,Oracle,Plsql,User Defined Types,我读过,我希望它会返回TRUE、FALSE或NULL 我有两种对象类型: CREATE TYPE o1 AS OBJECT ( id NUMBER ); / CREATE TYPE o2 AS OBJECT ( id NUMBER ); / 当我运行下面的代码时,一切正常 DECLARE type1 o1; BEGIN type1 := o1(id=>1); if (type1 IS OF (o1)) then DBMS_OUTPUT.PUT_LINE(
CREATE TYPE o1 AS OBJECT ( id NUMBER );
/
CREATE TYPE o2 AS OBJECT ( id NUMBER );
/
当我运行下面的代码时,一切正常
DECLARE
type1 o1;
BEGIN
type1 := o1(id=>1);
if (type1 IS OF (o1)) then
DBMS_OUTPUT.PUT_LINE('type1 is o1');
END if;
END;
/
但当我尝试跑步时:
DECLARE
type1 o1;
BEGIN
type1 := o1(id=>1);
if (type1 IS OF (o2)) then
DBMS_OUTPUT.PUT_LINE('type1 is o1');
END if;
END;
/
我收到了以下例外情况
Error report:
ORA-06550: line 6, column 21:
PLS-00382: expression is of wrong type
ORA-06550: line 6, column 4:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
在文档中并没有明确的解释,我是否应该捕获错误类型的异常?或者,在IF条件下是否应为false?如果您已将变量声明为
O1
类型,则可以使用为[type]
条件来测试变量是否为O1
类型或O1
的子类型。下面是一个示例(必须实例化变量):
更新:
获取有关为[type]
的详细信息。通常,变量的数据类型在编译时是已知的,但如果必须处理动态类型,则可以查看anydata
(对象数据类型)。下面是一个简单的例子:
SQL> declare
2 l_o1 o1;
3
4 -- Here is a procedure(for the sake of simplicity has not
5 -- been written as a schema object)
6 -- that doesn't not know
7 -- variable of what dada type will be passed in
8 -- at compile time;
9 procedure DoSomething(p_var anydata)
10 is
11 begin
12 case p_var.gettypename
13 when 'HR.O1'
14 then dbms_output.put_line('O1 data type. Do something');
15 when 'HR.O2'
16 then dbms_output.put_line('O2 data type. Do something');
17 else
18 dbms_output.put_line('Unknown data type');
19 end case;
20 end;
21
22 begin
23 l_o1 := o1(prop => 1);
24 DoSomething(anydata.ConvertObject(l_o1));
25 end;
26 /
O1 data type. Do something
PL/SQL procedure successfully completed
谢谢(我知道这一点,但我想检查任何类型),对我来说很奇怪,在这种情况下,文档不是很清楚。有没有其他的选择(我知道有可能转换成任何类型,然后得到一个可以与user_types视图相比较的名称)?是的,我写过这个解决方案,但我认为有一些东西很简单。如果有人知道其他解决方案,请写信,这(半)解决我的问题。非常感谢。
SQL> declare
2 l_o1 o1;
3
4 -- Here is a procedure(for the sake of simplicity has not
5 -- been written as a schema object)
6 -- that doesn't not know
7 -- variable of what dada type will be passed in
8 -- at compile time;
9 procedure DoSomething(p_var anydata)
10 is
11 begin
12 case p_var.gettypename
13 when 'HR.O1'
14 then dbms_output.put_line('O1 data type. Do something');
15 when 'HR.O2'
16 then dbms_output.put_line('O2 data type. Do something');
17 else
18 dbms_output.put_line('Unknown data type');
19 end case;
20 end;
21
22 begin
23 l_o1 := o1(prop => 1);
24 DoSomething(anydata.ConvertObject(l_o1));
25 end;
26 /
O1 data type. Do something
PL/SQL procedure successfully completed