gpt4 book ai didi

oracle - IS OF TYPE 产生异常

转载 作者:行者123 更新时间:2023-12-04 09:43:33 24 4
gpt4 key购买 nike

我读过 IS OF TYPE我希望它应该返回 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('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输入然后你可以使用is of [type]仅测试您的变量是否为 o1 的条件类型或属于 o1的亚型。这是一个示例(必须实例化变量):

 -- base type  
SQL> create or replace type o1 as object(
2 prop number
3 )not final;
4 /

Type created

-- O1's subtype
SQL> create or replace type o2 under o1(
2 prop1 number
3 );
4 /

-- test if the l_o1 is of O1 type
SQL> declare
2 l_o1 o1;
3 begin
4 l_o1 := o1(prop=>1);
5 if l_o1 is of (o1)
6 then
7 dbms_output.put_line('Yes');
8 else
9 dbms_output.put_line('No');
10 end if;
11 end;
12 /

Yes

PL/SQL procedure successfully completed

-- test if the l_o1 is of O2 type
SQL> declare
2 l_o1 o1;
3 begin
4 l_o1 := o1(prop=>1);
5 if l_o1 is of (o2)
6 then
7 dbms_output.put_line('Yes');
8 else
9 dbms_output.put_line('No');
10 end if;
11 end;
12 /

No

PL/SQL procedure successfully completed


-- test if the l_o2 is of O2 type

SQL> declare
2 l_o2 o2;
3 begin
4 l_o2 := o2(prop=>1, prop1 => 1);
5 if l_o2 is of (o2)
6 then
7 dbms_output.put_line('Yes');
8 else
9 dbms_output.put_line('No');
10 end if;
11 end;
12 /

Yes

PL/SQL procedure successfully completed

更新 :

Take a look at this获取更多信息 is of[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

关于oracle - IS OF TYPE 产生异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13325190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com