sql >> Database teknologi >  >> RDS >> Oracle

Får PLS-00201-fejl under oprettelse af en type i orakel

%TYPE syntaks er til brug i PL/SQL-deklarationer. Desværre kan vi ikke bruge det, når vi opretter SQL-objekter. Det samme gælder for %rowtype .

Det ville være meget pænt, hvis vi kunne, fordi en almindelig brug af create or replace type ville være at bygge tabel API'er, som du vil gøre. Det ville dog være for kompliceret at administrere referencekonstruktioner i dataordbogen; husk på, at typer kan bruges til at definere andre objekter inklusive tabelkolonner.

Så desværre er du nødt til at erklære typen med eksplicitte datatyper for dens attributter:

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
);

Det er klart, at du også skal synkronisere det manuelt, hver gang strukturen af ​​en T_C_EVO_GAME_CONFIG_CHANGE_LOG kolonne ændres. Men du ville være nødt til at gøre dette alligevel, hvis du tilføjede eller droppede en kolonne.

Alternativt kan du definere typen som en PL/SQL-post i en pakke. Det ville tillade dig at bruge referencesyntaksen.

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;

Det afhænger af, hvordan du vil bruge typen i dit bredere program.




  1. Formatering af et PHP-array til en SQL IN-klausul

  2. Hvor forskellig er PostgreSQL fra MySQL?

  3. Sådan opretter du en database i SQL Server

  4. hvorfor PG::UniqueViolation:FEJL:duplikeret nøgleværdi overtræder unik begrænsning?