Oracle PL/SQL Tutorial/PL SQL Data Types/AnyData

Материал из SQL эксперт
Перейти к: навигация, поиск

Demonstrate the use of SYS.AnyData

   <source lang="sql">

SQL> SQL> SQL> CREATE OR REPLACE TYPE facebook AS OBJECT (

 2     name VARCHAR2(30),
 3     height NUMBER
 4  );
 5  /

Type created. SQL> SQL> CREATE OR REPLACE TYPE firsttalk AS OBJECT (

 2     name VARCHAR2(30),
 3     length NUMBER
 4  );
 5  /

Type created. SQL> SQL> DECLARE

 2     TYPE feature_array IS VARRAY(2) OF SYS.AnyData;
 3     features feature_array;
 4     wf facebook;
 5     rv firsttalk;
 6     ret_val NUMBER;
 7  BEGIN
 8
 9     features := feature_array(
10                    SYS.AnyData.ConvertObject(facebook("Girl",30)),
11                    SYS.AnyData.ConvertObject(firsttalk("firsttalk", 85.40))
12                 );
13
14
15     FOR x IN 1..features.COUNT LOOP
16         CASE features(x).GetTypeName
17         WHEN "GENNICK.facebook" THEN
18            ret_val := features(x).GetObject(wf);
19            DBMS_OUTPUT.PUT_LINE("facebook: "|| wf.name || ", Height = " || wf.height || " feet.");
20         WHEN "GENNICK.firsttalk" THEN
21            ret_val := features(x).GetObject(rv);
22            DBMS_OUTPUT.PUT_LINE("firsttalk: "|| rv.name || ", Length = " || rv.length || " miles.");
23         END CASE;
24     END LOOP;
25  END;
26  /

DECLARE

ERROR at line 1: ORA-06592: CASE not found while executing CASE statement ORA-06512: at line 16

SQL> SQL></source>