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

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

Заранее спасибо, Горан

7
задан Jeffrey Kemp 20 August 2010 в 04:11
поделиться

4 ответа

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

select tname from tab where tname = 'TABLE_NAME_TO_SEARCH_FOR';
15
ответ дан 6 December 2019 в 05:48
поделиться
select tname from tab where tname = 'TABLE_NAME';
8
ответ дан 6 December 2019 в 05:48
поделиться

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

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.

Питер.

4
ответ дан 6 December 2019 в 05:48
поделиться

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

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

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

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;
4
ответ дан 6 December 2019 в 05:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: