Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Pojawia się błąd PLS-00201 podczas tworzenia typu w oracle

%TYPE składnia jest używana w deklaracjach PL/SQL. Niestety nie możemy jej użyć przy tworzeniu obiektów SQL. To samo dotyczy %rowtype .

Byłoby bardzo fajnie, gdybyśmy mogli, ponieważ jedno powszechne użycie create or replace type byłoby tworzenie interfejsów API tabel tak, jak chcesz. Jednak zarządzanie konstrukcjami odwołań w słowniku danych byłoby zbyt skomplikowane; pamiętaj, że typy mogą być używane do definiowania innych obiektów, w tym kolumn tabeli.

Niestety, musisz zadeklarować Type z wyraźnymi typami danych dla jego atrybutów:

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

Oczywiście musisz również zsynchronizować go ręcznie za każdym razem, gdy zmieni się struktura dowolnej kolumny T_C_EVO_GAME_CONFIG_CHANGE_LOG. Ale i tak musiałbyś to zrobić, jeśli dodałeś lub upuściłeś kolumnę.

Alternatywnie możesz zdefiniować typ jako rekord PL/SQL w pakiecie. To pozwoliłoby ci użyć składni odniesienia.

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;

To zależy od tego, jak chcesz używać Typu w szerszej aplikacji.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PL/SQL niewystarczające uprawnienia w zapytaniu możliwe ręcznie

  2. Źle w instrukcji select w ORACLE

  3. czy nieunikalny indeks pozwala uniknąć powielania rekordów?

  4. Oracle SELECT TOP 10 rekordów

  5. jak zadeklarować % ROWTYPE zmiennej, która jest słabo wpisanym SYS_REFCURSOR?