现在需要将原来的部门移到另一个模块中作为大类,把对应的产品移过去作为子类,把产品文件移过去作为文章。
部门与大类表、产品与小类表、产品文件和文章表结构都是不一样的。主要是需要把整个结构移过去,部分字段是可以舍去的。需要用SQL需要怎么做?
部门表
CREATE TABLE EML_DEPAT
(
SEQID VARCHAR2(12) NOT NULL, --序列号
DEPAT_NAME VARCHAR2(50) NOT NULL, --部门名称
CREATE_TIME DATE , -- 记录创建时间
LAST_UPDATE_TIME DATE -- 最后更新时间
);
ALTER TABLE EML_DEPAT ADD CONSTRAINTS PK_EML_DEPAT PRIMARY KEY(SEQID);
产品表
CREATE TABLE EML_PRODUCT
(
SEQID VARCHAR2(12) NOT NULL, --序列号
PRODUCT_NAME VARCHAR2(100) NOT NULL, --产品名称
DEPAT_NUM VARCHAR2(12) NOT NULL , --所属部门
CREATE_TIME DATE , -- 记录创建时间
LAST_UPDATE_TIME DATE -- 最后更新时间
);
ALTER TABLE EML_PRODUCT ADD CONSTRAINTS PK_EML_PRODUCT PRIMARY KEY(SEQID);
产品文件表
CREATE TABLE EML_PRODUCT_FILE
(
SEQID VARCHAR2(12) NOT NULL, --序列号
FILE_NAME VARCHAR2(100) NOT NULL, --文件名称
PRODUCT_NO VARCHAR2(12) NOT NULL, -- 产品编号
CREATE_TIME DATE , -- 记录创建时间
LAST_UPDATE_TIME DATE -- 最后更新时间
);
ALTER TABLE EML_PRODUCT_FILE ADD CONSTRAINTS PK_EML_PRODUCT_FILE PRIMARY KEY(SEQID);
大类表
CREATE TABLE EML_MARKET_TYPE
(
TYPE_ID VARCHAR2(12) NOT NULL, --序列号
TYPE_NAME VARCHAR2(20) NOT NULL, --类型名称
OPER_ID VARCHAR2(15) NOT NULL, --最后修改人
STATUS CHAR(1) DEFAULT '0' NOT NULL, --状态
LAST_UPDATE_TIME DATE NOT NULL -- 最后更新时间
);
ALTER TABLE EML_MARKET_TYPE ADD CONSTRAINTS PK_EML_MARKET_TYPE PRIMARY KEY(TYPE_ID);
小类表
CREATE TABLE EML_MARKET_PROGRAM
(
PROGRAM_ID VARCHAR2(12) NOT NULL, --序列号
PROGRAM_NAME VARCHAR2(30) NOT NULL, --专栏名称
TYPE_ID VARCHAR2(12) NOT NULL, --所属类型
OPER_ID VARCHAR2(15) NOT NULL, --最后修改人
STATUS CHAR(1) DEFAULT '0' NOT NULL, --状态
LAST_UPDATE_TIME DATE NOT NULL -- 最后更新时间
);
ALTER TABLE EML_MARKET_PROGRAM ADD CONSTRAINTS PK_EML_MARKET_PROGRAM PRIMARY KEY(PROGRAM_ID);
文章表
CREATE TABLE EML_MARKET_ARTICLE
(
ARTICLE_ID VARCHAR2(12) NOT NULL, --序列号
PROGRAM_ID VARCHAR2(12) NOT NULL, --所属专栏
TITLE VARCHAR2(300) NOT NULL, --文章标题
SUBJECT VARCHAR2(300) NULL, --主题文章名称
STATUS CHAR(1) DEFAULT '0' NOT NULL, --状态
CREATE_TIME DATE NOT NULL,--创建时间
LAST_UPDATE_TIME DATE NOT NULL -- 最后更新时间
);
ALTER TABLE EML_MARKET_ARTICLE ADD CONSTRAINTS PK_EML_MARKET_ARTICLE PRIMARY KEY(ARTICLE_ID);
把部门的名称移到大类中,把对应产品的名称移到小类中,产品文件的名称移到文章表中做文章名。因为表的结构不一样,有些字段是不允许为空的,而且这个结构也需要移过来。所以感到比较困难。有人会做吗?
最后修改人之类的可以任填,就是数据间的对应关系需要保留。
4 个解决方案
#1
有外键约束之类的,先全部去掉。
试试insert into table1(col1,col2,col3) select value1,value2,value3 from table2能否满足。
或者先备份好所有数据,然后改变字段名看看。
试试insert into table1(col1,col2,col3) select value1,value2,value3 from table2能否满足。
或者先备份好所有数据,然后改变字段名看看。
#2
不能随意改表的结构的,难办就在这里。如果其他的都可以为空,就好吧了。
#3
我的意思是建个测试环境,逐步转换,没理清不好一步到位。
#4
写个function,可以建几个中间表,把需要修改的源数据先放到中间表,处理完之后再插入到正式表,执行function,一步到位
#1
有外键约束之类的,先全部去掉。
试试insert into table1(col1,col2,col3) select value1,value2,value3 from table2能否满足。
或者先备份好所有数据,然后改变字段名看看。
试试insert into table1(col1,col2,col3) select value1,value2,value3 from table2能否满足。
或者先备份好所有数据,然后改变字段名看看。
#2
不能随意改表的结构的,难办就在这里。如果其他的都可以为空,就好吧了。
#3
我的意思是建个测试环境,逐步转换,没理清不好一步到位。
#4
写个function,可以建几个中间表,把需要修改的源数据先放到中间表,处理完之后再插入到正式表,执行function,一步到位