2015-07-03 3 views
0

Здравствуйте я использую оракула разработчик SQLPL/SQL, если таблица не существует создать

У меня есть создать процедуру, и мне нужно, чтобы проверить, если таблица существует, если не существует я должен создать как можно это сделать?

У меня попробовать этот

DECLARE v_emp int:=0; 
BEGIN 
    SELECT count(*) into v_emp FROM dba_tables; 

    if v_emp = 0 then 
    EXECUTE IMMEDIATE 'create table EMPLOYEE (ID NUMBER(3), NAME VARCHAR2(30) NOT NULL)'; 
    end if; 
END; 

но дают мне ошибку 00103, потому что не найти таблицу

+0

Введите код примера. – Ionic

+0

См. Мой ответ. Попробуйте запросить 'all_tables' не просто hasba_tables'. – Ionic

+0

Вместо 'DBA_TABLES' вы можете попробовать' USER_TABLES'. – GolezTrol

ответ

1

Вы можете запустить, например:

if (select count(*) from all_tables where table_name = 'yourTable')>0 then 
-- table exists 
else 
-- table doesn't exist 
end if; 
3

Просто выполните создавать и смотреть исключение при броске. Oracle никогда не заменит таблицу DDL.

declare 
    error_code NUMBER; 
begin 
EXECUTE IMMEDIATE 'CREATE TABLE EMPLOYEE(AGE INT)'; 
exception 
when others then 
error_code := SQLCODE; 
if(error_code = -955) 
then 
    dbms_output.put_line('Table exists already!'); 
else 
    dbms_output.put_line('Unknown error : '||SQLERRM); 
end if; 
end; 
+0

Я не знаю, почему, когда я ввел в процедуру не запускать – v3ctor

+0

, вы включили 'DBMS_OUTPUT'? 'SET SERVERPUT ON' в' SQL * Plus' –

+0

i использовать sql-разработчик – v3ctor

0

Вы должны попробовать следующее,

declare 
nCount NUMBER; 
v_sql LONG; 

begin 
SELECT count(*) into nCount FROM dba_tables where table_name = 'EMPLOYEE'; 
IF(nCount <= 0) 
THEN 
v_sql:=' 
create table EMPLOYEE 
(
ID NUMBER(3), 
NAME VARCHAR2(30) NOT NULL 
)'; 
execute immediate v_sql; 

END IF; 
end; 
Смежные вопросы