2010-08-19 13 views

Odpowiedz

12

można kwerendy tablenames

select tname from tab where tname = 'TABLE_NAME_TO_SEARCH_FOR'; 
+0

Należy pamiętać, że nazwa tabeli musi być wielkimi literami, nawet jeśli utworzono tabelę bez wielkich liter. – Elmue

7
select tname from tab where tname = 'TABLE_NAME'; 
4

to gdzie prawdziwa moc schemacie informacyjnym przychodzi. proste zapytanie skieruje cię właściwy kierunek:

SELECT 
    * 
FROM 
    information_schema.tables 
WHERE 
    table_name='salesorders'; 

To może następnie b e stosowane w funkcji plpg

CREATE OR REPLACE FUNCTION table_exists(v_table text) 
    RETURNS boolean AS 
$BODY$ 
    DECLARE 
    v_count int; 
    v_sql text; 
BEGIN 
    v_sql = 
    'SELECT ' || 
    ' count(1) ' || 
    'FROM ' || 
    ' information_schema.tables ' || 
    'WHERE ' || 
    E' table_name=\'' || v_table || E'\''; 

    EXECUTE v_sql INTO v_count; 

    RETURN v_count>0; 
END; 
$BODY$ 
LANGUAGE 'plpgsql' VOLATILE 
    COST 100; 

Użyj funkcji

select * from table_exists('salesordesrs'); 

To powinno wystarczyć, aby można było.

OOPS Wydaje się, że błędnie przeczytałem pierwotne pytanie o plakaty. Odpowiedziałem na PostgreSQL.

Peter.

3

Najbardziej skuteczną metodą jest, nie. Po prostu upuść stół. Jeśli tabela już nie istnieje, spowoduje to zgłoszenie wyjątku.

Uruchamianie zapytania tuż przed upuszczeniem tabeli jest po prostu marnowaniem czasu na to, co Oracle zrobi automatycznie za Ciebie.

można obsłużyć wyjątek jednak chcesz, np .:

BEGIN 
    EXECUTE IMMEDIATE 'DROP TABLE "MYTABLE"'; 
EXCEPTION 
    WHEN OTHERS THEN 
    IF SQLCODE = -942 THEN 
     DBMS_OUTPUT.put_line('the table did not exist!'); 
    ELSE 
     RAISE; 
    END IF; 
END; 
+0

@ user428955: nie, to nie zadziała - zmienna powiązania nie może być użyta dla nazwy tabeli. –

+0

Jesteś pewien? http://docs.oracle.com/cd/B14117_01/appdev.101/b10807/13_elems017.htm wydaje się nie zgadzać z tobą. – KJP

+0

tak, jestem pewien. W tym łączu nie ma nic, co sugerowałoby, że * nazwa tabeli * może być podana w zmiennej związanej. –

1

miałem pewne problemy z powyższych rozwiązań, jak mój DB ma szczególną strukturę drzewa. Powinno to dać każdej tabeli w swoim schemacie:

SELECT 
    table_name 
FROM 
    all_tables 
WHERE 
    table_name = '<your table here>' 
+0

Należy pamiętać, że nazwa tabeli musi być wielkimi literami, nawet jeśli zostały utworzone tabela bez wielkich liter. – Elmue

Powiązane problemy