加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在Oracle中创建之前,检查表是否存在

发布时间:2020-12-12 13:48:14 所属栏目:百科 来源:网络整理
导读:尝试检查是否在Oracle中创建之前存在表.搜索Stackoverflow和其他人的大部分帖子.查找一些查询,但它对我来说没有效果. IF((SELECT count(*) FROM dba_tables where table_name = 'EMPLOYEE') = 0)THENcreate table EMPLOYEE(ID NUMBER(3),NAME VARCHAR2(30) N
尝试检查是否在Oracle中创建之前存在表.搜索Stackoverflow和其他人的大部分帖子.查找一些查询,但它对我来说没有效果.
IF((SELECT count(*) FROM dba_tables where table_name = 'EMPLOYEE') <= 0)
THEN
create table EMPLOYEE
(
ID NUMBER(3),NAME VARCHAR2(30) NOT NULL
)
END IF;

这给我错误

Error: ORA-00900: invalid SQL statement
SQLState:  42000
ErrorCode: 900
Position: 1

我搜索IF条件的语法,我认为哪个也是写.
请建议我….

正如Rene还评论的,先检查然后创建表是很常见的.
如果你想要根据你的方法运行代码,这将是:
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;

但是我宁愿赶上异常,也可以节省一些不必要的代码:

declare
v_sql LONG;
begin

v_sql:='create table EMPLOYEE
  (
  ID NUMBER(3),NAME VARCHAR2(30) NOT NULL
  )';
execute immediate v_sql;

EXCEPTION
    WHEN OTHERS THEN
      IF SQLCODE = -955 THEN
        NULL; -- suppresses ORA-00955 exception
      ELSE
         RAISE;
      END IF;
END; 
/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读