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>