oracle – IS OF TYPE生成异常
发布时间:2021-01-16 21:36:00 所属栏目:站长百科 来源:网络整理
导读:我读了约莫 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 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前提下假设错误吗? 办理要领假如您已将变量声明为O1范例,那么您可以行使[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获取有关[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
(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

