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 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |