Проверьте, существует ли таблица в базе данных - PL SQL - PullRequest
7 голосов
/ 19 августа 2010

Я новичок в PL SQL, и мне нужно проверить, существует ли таблица на сервере, и удалить ее.

Спасибо заранее, Goran

Ответы [ 5 ]

15 голосов
/ 19 августа 2010

вы можете запросить имена таблиц

select tname from tab where tname = 'TABLE_NAME_TO_SEARCH_FOR';
8 голосов
/ 19 августа 2010
select tname from tab where tname = 'TABLE_NAME';
4 голосов
/ 19 августа 2010

Именно здесь проявляется истинная сила информационной схемы. Простой запрос укажет вам правильное направление

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

Это можно использовать в функции 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;

Используйте функцию

select * from table_exists('salesordesrs');

Этого должно быть достаточно, чтобы начать работу.

OOPS Кажется, я неправильно понял оригинальный вопрос об авторах.Я отвечал за PostgreSQL.

Питер.

3 голосов
/ 20 августа 2010

Самый эффективный метод - нет. Просто брось стол. Если таблица еще не существует, она вызовет исключение.

Выполнение запроса непосредственно перед удалением таблицы просто напрасно тратит время на то, что Oracle сделает для вас автоматически.

Вы можете обработать исключение, как хотите, например ::10000 *

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;
1 голос
/ 01 марта 2016

У меня были некоторые проблемы с вышеупомянутыми решениями, так как моя БД имеет своеобразную древовидную структуру.Это должно дать каждой таблице в вашей схеме:

SELECT
   table_name
FROM
   all_tables
WHERE
   table_name = '<your table here>'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...