sql >> Database >  >> RDS >> Oracle

Definieer een recordtype in PL/SQL-blok dat verwijst naar een verzameling van zichzelf

U kunt objecten gebruiken die zijn gedefinieerd in de SQL-scope met behulp van overerving:

SQL Fiddle

Oracle 11g R2 Schema-instellingen :

CREATE TYPE abstract_item IS OBJECT (
  name VARCHAR2(64)
) NOT FINAL NOT INSTANTIABLE
/

CREATE TYPE t_items IS TABLE OF abstract_item
/

CREATE TYPE t_item UNDER abstract_item (
  children t_items
) INSTANTIABLE
/

Query 1 :

SELECT t_item(
         '1',
         t_items(
           t_item( '1.1', t_items() ),
           t_item(
             '1.2',
             t_items(
               t_item( '1.2.1', null )
             )
           ),
           t_item( '1.3', null )
         )
       )
FROM   DUAL

Resultaten :(SQLFiddle geeft het niet mooi weer - maar het werkt zonder fouten)

| T_ITEM('1',T_ITEMS(T_ITEM('1.1',T_ITEMS()),T_ITEM('1.2',T_ITEMS(T_ITEM('1.2.1',NULL))),T_ITEM('1.3',NULL))) |
|-------------------------------------------------------------------------------------------------------------|
|                                                                                  [email protected] |

Je zou een soortgelijke verklaring kunnen gebruiken in PL/SQL:

DECLARE
  items t_item;
BEGIN
  items = t_item( 'Item Name', t_items( /* ... */ ) );
END;
/


  1. SQLite groeperen op

  2. Scheid door komma's gescheiden mySql-databaseveldwaarde met php

  3. Hoe om te gaan met verschillende soorten gebruikers bij het inloggen?

  4. Genereer een willekeurige alfanumerieke tekenreeks als primaire sleutel voor een model