首先,Oracle 没有这种语句 create table xxx if exists!
所以我们可以另辟蹊径,通过写存储过程,然后用mybatis 调用,在动态建表之前先调用存储过程验证时候有该表,如果有就通过我们写的存储过程删除,存储过程代码如下:
CREATE OR REPLACE procedure "PROC_DROPIFEXISTS"( p_table in varchar2 ) is v_count number(10); begin select count(*) into v_count from user_objects where object_name = upper(p_table); if v_count > 0 then execute immediate 'drop table ' || p_table ||' cascade constraints'; end if; end;
mybatis的xml文件代码如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.mypro.employee.dao.ImportMapper" > <select id="dropTable" parameterType="Map" statementType="CALLABLE"> <![CDATA[ {call PROC_DROPIFEXISTS (#{tableName,jdbcType=VARCHAR})} ]]> </select > <update id="createTable" parameterType="Map"> <![CDATA[ create table ${tableName} (id integer,name varchar(20)) ]]> </update> </mapper>
Service里面直接调用就OK
package com.mypro.employee.service.impl; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.mypro.employee.dao.ImportMapper; import com.mypro.employee.service.ImportService; @Service @Transactional(rollbackFor=Exception.class) public class ImportServiceImpl implements ImportService{ @Autowired private ImportMapper importMapper; @Override public void createTable(Map<String, Object> map) { importMapper.dropTable((String)map.get("tableName"));// 调用存储过程删除表,有就删除,没有不做操作 importMapper.createTable(map); //动态建表 } }
相关推荐
在Oracle数据库管理系统中,建表语句是进行数据存储和管理的基础操作。Oracle支持SQL标准的CREATE TABLE语句,用于创建新的数据库表。本篇将深入探讨Oracle中的基本建表语句及其相关操作。 首先,建表语句的基本...
本文将详细介绍Oracle的基本建表语句及相关操作。 首先,创建用户是数据库管理的基础。Oracle中创建用户的基本语法如下: ```sql CREATE USER 用户名 IDENTIFIED BY 密码 DEFAULT TABLESPACE 表空间名 TEMPORARY ...
### Oracle经典建表语句详解 #### 一、概述 在数据库管理中,创建表是一项基本而重要的操作。本文档将详细介绍两个Oracle经典建表语句案例:`DHC_BY_GOODSBUY`表与`DHC_BY_GOODSBUYTOTAL`表的创建过程,并额外解析...
### Oracle基本建表语句知识点总结 #### 一、创建用户 在Oracle数据库中,创建用户是基础操作之一。这通常用于控制不同开发者或应用程序之间的访问权限。 **语法:** ```sql CREATE USER <username> IDENTIFIED BY...
Java 操作 Oracle 数据库(建表,插数据,删除) Java 是一种广泛使用的编程语言,而 Oracle 数据库是一种功能强大且广泛使用的关系型数据库管理系统。在本文中,我们将探讨如何使用 Java 操作 Oracle 数据库,包括...
本文将详细解析Oracle的基本建表语句以及相关的数据库操作。 首先,创建用户是数据库管理的第一步。以下是一个创建用户`han`的示例: ```sql CREATE USER han IDENTIFIED BY han DEFAULT TABLESPACE users ...
在给定的“Oracle建表代码及样本数据.rar”压缩包中,包含两个主要文件:“Oracle建表.txt”和“Oracle教程样本数据.xls”。这些文件分别提供了创建Oracle数据库表的SQL脚本和一些示例数据,便于理解和学习如何在...
### Oracle基本建表语句集知识点详解 #### 创建用户 - **语法**: ```sql CREATE USER <用户名> IDENTIFIED BY <密码> DEFAULT TABLESPACE <表空间名> TEMPORARY TABLESPACE <临时表空间名>; GRANT <角色>,<角色...
本文将深入探讨Oracle建表的一些关键知识点,包括对象命名原则、数据类型、约束条件、表的修改、删除和重命名,以及序列的创建。 首先,我们来看对象命名原则。在Oracle中,创建的表、列、索引等对象的名称有以下...
以下是对Oracle建表命令和相关约束的详细总结: 1. **主键(Primary Key)**: 主键是用来唯一标识表中每一条记录的关键字段,不允许有重复值且不能为空。在Oracle中,可以使用`PRIMARY KEY`关键字来创建主键约束...
在Oracle中创建表是构建数据库结构的基础,下面将对"Oracle建表总结"中的关键知识点进行详细说明。 1. **对象命名原则**: - 对象名称必须以字母开头,长度在1到130个字符之间。 - 名称中可以包含AZ, az, 09...
删除用户使用`DROP USER`语句,但通常在删除用户前需要先回收其所有对象权限和角色: ```sql REVOKE ALL PRIVILEGES, GRANT OPTION FROM username; DROP USER username CASCADE; ``` `CASCADE`选项用于删除用户...
### Oracle建表建用户知识点详解 #### 创建表空间 在Oracle数据库中,表空间是物理存储的逻辑容器,用于组织数据库中的数据。每个数据库至少包含一个表空间,默认为`SYSTEM`表空间。创建表空间的基本语法如下: `...
在Oracle数据库系统中,"建表"是数据库管理员或开发人员进行数据管理的...以上是Oracle建表及相关操作的基础知识,实际应用中,建表时还需要考虑性能优化、安全性、并发控制等多个方面,确保数据库设计的高效和稳定。
在这个话题中,我们将探讨如何在Oracle中创建用户、管理表以及进行一些基本的表操作,包括添加和删除字段,以及处理主键和外键。 首先,创建用户是数据库管理的基础。在Oracle中,你可以使用`CREATE USER`语句来...
如果用的是oracleXE可能没有SCOTT用户,可以按照https://www.cnblogs.com/zhuzhixijiang/p/5192354.html 此微博,建立数据文件、表...可以将DROP TABLE语句删除。前面提到的微博中使用的工具是navicat,推荐大家使用。
- 可以使用`ALTER TABLE`语句删除或修改唯一约束,或者使用`DROP INDEX`删除唯一索引。 - 若要检查表是否有重复值,可以使用`DISTINCT`关键字查询,或使用`GROUP BY`结合`HAVING`来查找。 8. **源码和工具** - ...
在Oracle数据库管理中,表空间(Tablespaces)和用户(Users)是两个核心概念,用于组织和管理数据库的数据存储及权限控制。以下是关于这两个主题的详细介绍: **一、表空间(Tablespaces)** 表空间是Oracle...