2010-08-19 4 views

Répondre

12

vous pouvez interroger les noms de tables

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

Notez que le nom de la table doit être en majuscule même si vous avez créé la table sans majuscule. – Elmue

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

C'est là le vrai pouvoir du schéma d'information entre en jeu. Une requête simple vous pointer dans la bonne direction

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

Cela peut alors b e utilisé dans la fonction 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; 

Utilisez la fonction

select * from table_exists('salesordesrs'); 

Cela devrait être suffisant pour vous permettre de continuer.

OOPS Il semble que j'ai mal lu la question sur les affiches originales. J'ai répondu pour PostgreSQL.

Peter.

3

La méthode la plus efficace est, ne le faites pas. Laisse tomber la table. Si la table n'existait pas déjà, elle déclenchera une exception. Exécuter une requête juste avant de déposer la table, c'est perdre du temps à faire ce qu'Oracle fera automatiquement pour vous.

Vous pouvez gérer l'exception toutefois vous voulez, par exemple .:

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: non, cela ne fonctionnera pas - une variable de liaison ne peut pas être utilisée pour un nom de table. –

+0

Etes-vous sûr? http://docs.oracle.com/cd/B14117_01/appdev.101/b10807/13_elems017.htm semble être en désaccord avec vous. – KJP

+0

oui, j'en suis sûr. Il n'y a rien dans ce lien qui suggère qu'un * nom de table * peut être fourni dans une variable de liaison. –

1

J'ai eu quelques problèmes avec les solutions ci-dessus, mon DB a une structure arborescente particulière. Cela devrait donner à chaque table de votre schéma:

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

Notez que le nom de la table doit être en majuscule même si vous avez créé la table sans majuscule. – Elmue

Questions connexes