文章标题 Oracle数据库中dual表使用

一. 业务场景

业务流程需要进行写入和更新的比较,所以有原表和历史表。

要求表中的ID唯一性,以及两张表的ID关联,另外后续可能数据库会进行迁移

二.方案选择

方案一:id设置为int型自增长。

这种做法编程简单,无需考虑id唯一性,由数据库帮忙维护。但是在此业务场景下存在缺点

1. 这里存在两张表关联。id自增长无法确保数据唯一性,也就无法保证原表与历史表进行数据映射。比如说,现在需要向原表A和历史表A_HISTORY表中插入相同的一条数据。插入A表后,发现无法取到A表的ID(A表的ID是主键,根据其他条件无法确保数据的唯一性)也就无法保证A_HISTORY表与A表能到插入相同的一条数据

2. 因为后期需要进行数据库的迁移,而ID自增长的。在数据迁移过程中可能会发生错误

方案二:利用虚拟表dual表

dual表是系统表,有SYS用户创建,默认在system表空间下,与用户表空间分开的。通过在dual表中创建序列既可以进行表ID的唯一性控制。

三.实现

1. 可视化操作

在oracle工具sql developer中。在system表空间schema目录。建立序列Update_sequence,设置递进步长,最小值、最大值等。

2.sql 语句

create SEQUENCE Update_sequence
  INCREMENT BY 1 MAXVALUE 5000 CYCLE;

两种方法都可以创建序列,向表中插入数据时就可以使用

SELECT UPDATE_SEQUENCE.NEXTVAL FROM DUAL

作为原表和历史表的ID。这样既保证了id的唯一性,也确保了原表与历史表的数据能够映射起来

时间: 2024-08-05 11:16:57

文章标题 Oracle数据库中dual表使用的相关文章

如何导出远程oracle数据库中的表结构

从远程oracle数据库上导出指定表的表结构语句有两种方法: 方法一:通过sql语句获得 1,make sure that you can connect the remote database. 2,enter into the sqlplus,and execute the command: select dbms_metadata.getddl('TABLE',tablename) from user_tables and you will get all the tables defin

Oracle数据库中dual是什么东西啊?

最近在搞数据仓库时候,因为有些几乎固定值的表,需要直接写入一些数据,就看了一些资料.发现很多都是 from dual. dual是什么呢? dual是Oracle中的一个伪表,利用这个伪表可以设置或查看序列,或者是调用一些内置的函数,可以很方便的时候. 简单来说,dual表就是oracle与数据字典自动创建的一张表,这张表是一个单行单列的表,这个表只有1列:DUMMY,数据类型为VERCHAR2(1),dual表中只有一个数据'X', Oracle有内部逻辑保证dual表中永远只有一条数据.du

Oracle数据库的dual表的作用

dual是Oracle提供的最小的工作表,只有一行一列,具有某些特殊功用. 不论进行何种操作(不要删除记录),它都只有一条记录——'X'. 作用: 1.select计算常量表达式.伪列等值.dual表只能返回一条数据,而使用其它表时则可能返回多条数据. 2.查看当前用户 select user from dual; select count(*) from dual; 3.用作计算器 select 7*9*10-10 from fual; 4.调用系统函数 获得当前系统时间 select to_

【翻译自mos文章】oracle数据库中 基本的表压缩和高级压缩之间的区别

基本的表压缩和高级压缩之间的区别, 摘录自mos文章Difference Between Basic Table Compression And Advanced Compression (Doc ID 1548187.1) 适用于: Oracle Database - Enterprise Edition - Version 10.2.0.5 and later Information in this document applies to any platform. 目标: What is

oracle数据库中的表设置主键自增

oracle中没有自增字段,可通过序列+触发器间接实现,cmd中sqlplus登录,直接运行即可.一般要经过一下几步: 1建立数据表 create table Test_Increase(           userid number(10) primary key,  /*主键,自动增加*/           username varchar2(20)           ); 2创建自动增长序列 CREATE SEQUENCE TestIncrease_Sequence INCREMEN

expdp导出oracle数据库中指定表空间下数据

大家在工作中,应该很多接触各种各样的数据库,笔者在此记录一下,我的一次导出数据经历. 工作环境是oracle+Linux(红帽系统,类似centos) 1.进入linux系统(这里不在赘余) 2.运行sqlplus,建议创建oracle用户 管理数据库,直接输入sqlplus 可能不行,需要修改系统的环境变量,我这里是用的 . /home/oracle/.bash_profile 临时改变系统环境变量 3.在进入sqlplus 中,创建目录路径:输入命令: create directory my

Oracle中dual表的用途介绍

导读]dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录.我们可以用它来做很多事情.     dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录.我们可以用它来做很多事情,如下: 1.查看当前用户,可以在 SQL Plus中执行下面语句 select user from dual; 2.用来调用系统函数 select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') f

Oracle中dual表的用途

dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录.我们可以用它来做很多事情,如下: 1.查看当前用户,可以在 SQL Plus中执行下面语句 select user from dual; 2.用来调用系统函数 select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;--获得当前系统时间 select SYS_CONTEXT('USERENV','TERMINAL') from dual;

【转】Oracle中dual表的用途介绍

原文:Oracle中dual表的用途介绍 [导读]dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录.我们可以用它来做很多事情. dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录.我们可以用它来做很多事情,如下: 1.查看当前用户,可以在 SQL Plus中执行下面语句 select user from dual; 2.用来调用系统函数 select to_char(sysdate,'yyyy-mm