sql >> Databáze >  >> RDS >> Oracle

Při vytváření typu v oracle se zobrazuje chyba PLS-00201

%TYPE syntaxe je pro použití v PL/SQL deklaracích. Bohužel jej nemůžeme použít při vytváření SQL objektů. Totéž platí pro %rowtype .

Bylo by velmi elegantní, kdybychom mohli, protože jedno běžné použití create or replace type by bylo vytvořit rozhraní API pro tabulky, jak chcete. Bylo by však příliš komplikované spravovat referenční konstrukce v datovém slovníku; mějte na paměti, že typy lze použít k definování dalších objektů včetně sloupců tabulky.

Bohužel, musíte deklarovat typ s explicitními datovými typy pro jeho atributy:

create or replace type TYPE_EVOL_CONFIG_CHANGE_LOG as object
    (
    F_TABLE_MODIFIED        VARCHAR2(40) ,
    F_OPERATION_PERFORMED   VARCHAR2(30),
    F_ROWS_ALTERED          INTEGER , 
    F_LAST_UPDATED_BY       VARCHAR2(20) ,
    F_LAST_UPDATED_DATE     DATE
);

Samozřejmě jej také musíte synchronizovat ručně, kdykoli se změní struktura libovolného sloupce T_C_EVO_GAME_CONFIG_CHANGE_LOG. Ale stejně byste to museli udělat, pokud byste přidali nebo vypustili sloupec.

Alternativně můžete definovat typ jako záznam PL/SQL v balíčku. To by vám umožnilo použít odkazující syntaxi.

create or replace package game_config as    

    TYPE_EVOL_CONFIG_CHANGE_LOG is record
    (
        F_TABLE_MODIFIED        T_C_EVO_GAME_CONFIG_CHANGE_LOG.F_TABLE_MODIFIED%TYPE ,
        F_OPERATION_PERFORMED   T_C_EVO_GAME_CONFIG_CHANGE_LOG.F_OPERATION_PERFORMED%TYPE,
        F_ROWS_ALTERED          T_C_EVO_GAME_CONFIG_CHANGE_LOG.F_ROWS_ALTERED%TYPE , 
        F_LAST_UPDATED_BY       T_C_EVO_GAME_CONFIG_CHANGE_LOG.F_LAST_UPDATED_BY%TYPE ,
        F_LAST_UPDATED_DATE     T_C_EVO_GAME_CONFIG_CHANGE_LOG.F_LAST_UPDATED_DATE%TYPE
    );

    -- or even
    TYPE TAB_EVOL_CONFIG_CHANGE_LOG is table of T_C_EVO_GAME_CONFIG_CHANGE_LOG%rowtype;
end;

Záleží na tom, jak chcete typ použít ve své širší aplikaci.




  1. MySQL InnoDB zamyká spojené řádky

  2. Uložené procedury jsou ve světě php/mysql no-go?

  3. jak použít, pokud neexistuje při vkládání řádku mysql

  4. jak vybrat seznam 10 000 jedinečných ID z dual v Oracle SQL