PL / SQL如果表不存在则创建

时间:2015-07-03 13:56:58

标签: sql oracle plsql

您好我使用oracle 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因为找不到表

3 个答案:

答案 0 :(得分:4)

只需执行create并在抛出时观察异常。 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;

答案 1 :(得分:1)

您可以运行此示例:

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

答案 2 :(得分:1)

你应该尝试以下,

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;