Jestem nowa w PL SQL, i muszę sprawdzić, czy tabela istnieje na serwerze i upuść go.Sprawdź, czy tabela istnieje w bazie danych - PL SQL
Dzięki z góry, Goran
Jestem nowa w PL SQL, i muszę sprawdzić, czy tabela istnieje na serwerze i upuść go.Sprawdź, czy tabela istnieje w bazie danych - PL SQL
Dzięki z góry, Goran
można kwerendy tablenames
select tname from tab where tname = 'TABLE_NAME_TO_SEARCH_FOR';
select tname from tab where tname = 'TABLE_NAME';
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.
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;
@ user428955: nie, to nie zadziała - zmienna powiązania nie może być użyta dla nazwy tabeli. –
Jesteś pewien? http://docs.oracle.com/cd/B14117_01/appdev.101/b10807/13_elems017.htm wydaje się nie zgadzać z tobą. – KJP
tak, jestem pewien. W tym łączu nie ma nic, co sugerowałoby, że * nazwa tabeli * może być podana w zmiennej związanej. –
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>'
Należy pamiętać, że nazwa tabeli musi być wielkimi literami, nawet jeśli zostały utworzone tabela bez wielkich liter. – Elmue
Należy pamiętać, że nazwa tabeli musi być wielkimi literami, nawet jeśli utworzono tabelę bez wielkich liter. – Elmue