Несколько запросов «выполнить немедленно» в Oracle - PullRequest
1 голос
/ 23 февраля 2011

У меня есть такая последовательность запросов:

begin
execute immediate 'drop table mytable1';
exception when others then null;
end;

begin
execute immediate 'drop table mytable2';
exception when others then null;
end;

begin
execute immediate 'drop table mytable3';
exception when others then null;
end;

но когда я пытаюсь выполнить его в SQL Scratchpad, он говорит "встретился с символом начала", что указывает на то, что все запросы должны быть в одном начале ... если я удаляю все начало конца кроме первого начала и последнего конца, это дает мне «Неверный оператор SQL», как выполнить множественную удаленную таблицу или создать несколько таблиц с верхним шаблоном и проверить, существуют ли таблицы? Я знаю, что мой стиль с exception when others then null; считается плохой практикой, похожей на пустой catch () в других языках, но для меня это самый простой способ проверить, существует ли таблица в oracle

1 Ответ

1 голос
/ 23 февраля 2011
BEGIN
  EXECUTE IMMEDIATE 'drop table mytable1';

  EXECUTE IMMEDIATE 'drop table mytable2';

  EXECUTE IMMEDIATE 'drop table mytable3';
EXCEPTION
  WHEN OTHERS THEN
    NULL;
END;

Работает нормально.


Если вы спросите меня, exception when others then null - следует избегать.Если вы хотите проверить, существует ли таблица - запрос USER_TABLES

DECLARE
  V_EXISTS NUMBER;

BEGIN

SELECT 1 INTO V_EXISTS FROM USER_TABLES WHERE TABLE_NAME = 'TEST';

IF V_EXISTS = 1 THEN
  EXECUTE IMMEDIATE 'DROP TABLE TEST';
END IF;

EXCEPTION
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('Table not found');
END;

Regd: ваш комментарий, если вы все еще хотите использовать метод в своем вопросеобернуть его во внешний анонимный блок

BEGIN

  BEGIN
    EXECUTE IMMEDIATE 'drop table mytable1';
  EXCEPTION
    WHEN OTHERS THEN
      NULL;
  END;

  BEGIN
    EXECUTE IMMEDIATE 'drop table mytable2';
  EXCEPTION
    WHEN OTHERS THEN
      NULL;
  END;

  BEGIN
    EXECUTE IMMEDIATE 'drop table mytable3';
  EXCEPTION
    WHEN OTHERS THEN
      NULL;
  END;

END;

Результат:

SQL> BEGIN
  2  
  3    BEGIN
  4      EXECUTE IMMEDIATE 'drop table mytable1';
  5    EXCEPTION
  6      WHEN OTHERS THEN
  7        NULL;
  8    END;
  9  
 10    BEGIN
 11      EXECUTE IMMEDIATE 'drop table mytable2';
 12    EXCEPTION
 13      WHEN OTHERS THEN
 14        NULL;
 15    END;
 16  
 17    BEGIN
 18      EXECUTE IMMEDIATE 'drop table mytable3';
 19    EXCEPTION
 20      WHEN OTHERS THEN
 21        NULL;
 22    END;
 23  
 24  END;
 25  
 26  /

PL/SQL procedure successfully completed.

SQL> 
...