Je suis nouveau dans PL SQL, et j'ai besoin de vérifier si la table existe sur le serveur et le laisser tomber.Vérifiez si la table existe dans la base de données - PL SQL
Merci à l'avance, Goran
Je suis nouveau dans PL SQL, et j'ai besoin de vérifier si la table existe sur le serveur et le laisser tomber.Vérifiez si la table existe dans la base de données - PL SQL
Merci à l'avance, Goran
vous pouvez interroger les noms de tables
select tname from tab where tname = 'TABLE_NAME_TO_SEARCH_FOR';
select tname from tab where tname = 'TABLE_NAME';
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.
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;
@ user428955: non, cela ne fonctionnera pas - une variable de liaison ne peut pas être utilisée pour un nom de table. –
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
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. –
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>'
Notez que le nom de la table doit être en majuscule même si vous avez créé la table sans majuscule. – Elmue
Notez que le nom de la table doit être en majuscule même si vous avez créé la table sans majuscule. – Elmue