[ROZWIĄZANY] Teradata: [Error 3807] [SQLState 42s02] Object ‘XYZ’ does not exists.

[ROZWIĄZANY] Teradata: [Error 3807] [SQLState 42s02] Object ‘XYZ’ does not exists.

Dość często w Teradacie możemy się spotkać z błędem [Error 3807] [SQLState 42s02] Object ‘XYZ’ does not exists bądź Failed [3807 : 42s02] Object ‘XYZ’ does not exists, gdzie ‘XYZ’ jest nazwą obiektu jaki podaliśmy w zapytaniu. Przyczynę niniejszego błędu można bardzo szybko zdiagnozować. W tym krótkim poście omówię przyczynę błędu oraz jak go rozwiązać.

Problem

Problem może powstać podczas wielu operacji DDL/DML uruchamianych na bazie danych. Oto najprostszy przykład:

SELECT TOP 10 * FROM XYZ;

Powód

Problem może wystąpić z kilku przyczyn:

  • próbujesz wykonać operację DML/DDL na tabeli, która istnieje w innej bazie danych
  • próbujesz wykonać operację DML/DDL na tabeli, która faktycznie nie istnieje
  • próbujesz wykonać operację SELECT/INSERT/UPDATE/DELETE itd.na tabeli, do której nie masz dostępu

Rozwiązanie

Próbujesz wykonać operację DML/DDL na tabeli, która istnieje na innym schemacie

Jeżeli wykonujesz operacje na Teradacie bez określenia bazy danych, wszystkie operacje wykonywane są na domyślnej bazie dla danego użytkownika. Sprawdźmy z jakiej bazy korzystasz obecnie:

SELECT DATABASE;

Następnie, sprawdźmy na jakim schemacie dostępna jest tabela, której szukasz:

SELECT DataBaseName, TableName, CreateTimeStamp, LastAlterTimeStamp
FROM dbc.TablesV
WHERE TableName='<your table name>';

Jeżeli tabela, której potrzebujesz jest dostępna w innej bazie danych, zmień domyślna bazę danych używając prostego polecenia:

DATABASE <your database name>;

lub podaj podczas zapytania, z jakiej bazy danych ma pochodzić tabela:

SELECT TOP 10 * FROM <your database name>.XYZ;

Próbujesz wykonać operację DML/DDL na tabeli, która faktycznie nie istnieje

Sprawdź czy tabela, do której się odwołujesz na pewno istnieje na danym schemacie. Możesz to sprawdzić poniższym zapytaniem:

SELECT DataBaseName, TableName, CreateTimeStamp, LastAlterTimeStamp
FROM dbc.TablesV
WHERE DataBaseName='<your database name>'
AND TableName='<your table name>';

Próbujesz wykonać operację SELECT/INSERT/UPDATE/DELETE itd.na tabeli, do której nie masz dostępu

W Teradacie, w bardzo szybki sposób możesz sprawdzić do jakich obiektów masz dostęp. Należy w tym celu wykorzystać dwa widoki znajdujące się w bazie dbc: AllRightsV oraz UserRightsV. Widok AllRightsV pokazuje uprawnienia dla wszystkich użytkowników systemu:

SELECT * 
FROM dbc.AllRightsV
WHERE UserName='<your user name>';

Natomiast UserRightsV pokazuje wszystkie uprawnienia przyznane naszemu użytkownikowi:

SELECT * 
FROM dbc.UserRightsV
WHERE UserName='<your user name>';

Jeśli spodobał Ci się ten post to zostaw proszę komentarz poniżej lub udostępnij ten post na swoim Facebook’u, Twitter’ze, LinkedIn lub innej stronie z mediami społecznościowymi.
Dzięki!

Leave a Reply

avatar
  Subscribe  
Powiadom o
Close Menu