存储-oracle,表判断是否存在,不存在则先创建表,再执行语句,存在则执行语句

问题描述

oracle,表判断是否存在,不存在则先创建表,再执行语句,存在则执行语句

create or replace
procedure proc_dept_monthhours as
v_sql varchar2(20000):='';
v_flag number(10,0):=0;

begin
select count(*) into v_flag from user_TABLES where table_name='HO_DEPT_MONTHHOURS';

if v_flag>0 then

begin
insert into test_dept_monthhours(yearmonth,branch,subtotal)
select yearmonth,branch,sum(dm)+sum(sm)+sum(smt)+sum(sup)+sum(ltnc)

from ehruser.HO_DEPT_MONTHHOURS@traininglink
group by branch,yearmonth;

else
v_sql='create table HO_DEPT_MONTHHOURS
(
yearmonth VARCHAR2(7),
branch NVARCHAR2(200),
subtotal NUMBER
) ';
v_sql='create unique index TRDHR.HO_DEPT_MONTHHOURS_BRANCH on HO_DEPT_MONTHHOURS (BRANCH)
tablespace TRAINING_DATA
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
)';
v_sql='tablespace TRAINING_DATA
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
)';
execute immediate v_sql;
insert into test_dept_monthhours(yearmonth,branch,subtotal)
select yearmonth,branch,sum(dm)+sum(sm)+sum(smt)+sum(sup)+sum(ltnc)

from ehruser.HO_DEPT_MONTHHOURS@traininglink
group by branch,yearmonth;
end;
end if;
commit;
end proc_dept_monthhours;为什么这个存储过程建好打叉???哪错了??

解决方案

在删除表前,oracle如何判断表是否存在,存在就删再创建,不存在直接创建!
oracle创建表时,先判断表是否存在
----------------------

解决方案二:

oracle,表判断是否存在,不存在则先创建表,再执行语句,存在则执行语句

需要判断一下这个表是否存在,可以参考这个语句

--判断表是否存在,如果存在则删除
declare
num number;
begin
select count(1) into num from all_tables where TABLE_NAME = 'EMP' and OWNER='SCOTT';
if num=1 then
execute immediate 'drop table EMP';
end if;
end;

解决方案三:

在Toad中调试一下,会提示到具体的行号,然后再分析问题出在哪里了

解决方案四:

再edit就可以看到哪里有错了

时间: 2024-09-24 10:33:51

存储-oracle,表判断是否存在,不存在则先创建表,再执行语句,存在则执行语句的相关文章

oracle中如何创建表空间

ORACLE中,表空间是数据管理的基本方法,所有用户的对象要存放在表空间中,也就是用户有空间的使用权,才能创建用户 对象.否则是不充许创建对象,因为就是想创建对象,如表,索引等,也没有地方存放,Oracle会提示:没有存储配额. 因此,在创建对象之前,首先要分配存储空间. 分配存储,就要创建表空间: 创建表空间示例如下: CREATE TABLESPACE "SAMPLE" LOGGING DATAFILE 'D:\ORACLE\ORADATA\ORA92\LUNTAN.ora' SI

spool命令、创建一个表,创建并且copy表,查看别的用户下的表,rowid行地址 索引的时候使用,表的增删改查,删除表,oracle的回收站

  1.spool命令 spool "D:\test.txt" spool off SQL> host cls 2.创建一个表 SQL> --条件(1):有创建表的权限,(2):有表空间 SQL> desc t4;  名称                                      是否为空? 类型  ----------------------------------------- -------- ----------------------

5.创建表,使用alter进行表信息的增删改,Oracle回收站,集合运算

 1  Oracle基于用户的管理方案 2 DDL语句可以管理数据库的对象有:视图   索引  序列  同义词   约束 3  创建一个表,有2个条件(1 有权限:2有表空间)    Oracle给你提供了默认的resource. 4 创建表,表信息的增删改,Oracle回收站 DDL          管理数据库的对象                    表                    视图 索引 序列 同义词 约束(..... )            oracle基于用户的

Access 2007中创建表关系

关系数据库之所以称之为"关系"数据库,其真谛在于可以追踪数据库中数据元素之间的关系.然而,很多数据库用户并不知道如何利用关系数据库的这个功能,只是简单地把Access当作高级电子表格来使用.本文我们将和大家探讨如何在一个Access数据库中为两个表创建关系. 第一步:启动 首先,我们要启动Access,打开存放新表格的数据库.在这个例子当中,我们将使用一个简单的用来跟踪运行活动的数据库.该数据库包含了两个表:表routes(日常运行路径的追踪记录)和表runs(对每一个运行活动的单独记

createtable-通过oledb的方式连接excel,不能创建表名为纯数字的表

问题描述 通过oledb的方式连接excel,不能创建表名为纯数字的表 通过oledb的方式连接excel,创建表名为纯数字的表时,excel文件中创建的工作表名在前面加了下划线,例如创建表名为1的表时,生成的工作表名为_1._有办法直接创建纯数字的表名吗? 解决方案 或者能不能通过oledb的方式改Excel中的表名为纯数字? 解决方案二: 求助,有大神有办法吗 解决方案三: 虽然没有人回答,但是自己还是做个总结吧.最后的解决方式是通过引用excel类库进行修改工作簿的名称.

用SQLyog链接的mysql数据库创建表的时候报错--请高手解决。

问题描述 第一张:第二张;:第三张:上面三张图是我再使用SQLyog,创建表的时候遇到的,只要一创建表就会报错.不知道什么原因.第二张图是报错的图,第三张图是报错的具体信息.....希望高手能帮我解决下. 解决方案 解决方案二:先只建一个带id主键的表,看看会不会报错.如果不报错在添加其他字段.看添加哪一个字段时报错.

不懂编程和数据库也能创建表单

在广大站长看来,要做带交互功能的网站,必须要用到表单,并且需要了解HTML,JavaScript及一种后台语言和数据库技术.但今天小编想说的是这句话只说对了一半:要做交互网站,必须要表单,但并不需要懂很专业的计算机技术. 秘诀就在今天要给大家推荐的一款叫"表单大师"的产品,利用它创建表单,完全不需要你懂得上面任何一种技术,只需要懂得什么是链接就可以了. 表单大师实际上是一款在线表单设计程序,无需非常专业的技术,通过简单拖拽组件就能设计一个非常专业的表单. 目前表单大师支持的组件非常丰富

[ASP.NET]对Oracle数据库创建表/判断数据表是否已存在

asp.net|oracle|创建|数据|数据库 对Oracle数据库创建表: Dim myConnectionString As String Dim myConnection As OleDbConnection Dim myCommand As OleDbCommand Dim myCreateSQL As String myConnectionString = "Provider='OraOLEDB.Oracle.1';User ID=[User ID];Data Source=[Dat

oracle表空间,角色,权限,表,索引,序列号,视图,同义词,约束条件,存储函数和过程,常用数据字典,基本数据字典信息,查看VGA信息,维护表空间,创建表空间等信息

查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select * from user_role_privs; 查看当前用户的系统权限和表级权限 SQL>select * from user_sys_privs;        结果可以是:        USERNAME                       PRIVILEGE