思考题: 将MGR的字段属性由数值型改为字符串,同时还能保留原本的信息

tech2022-11-05  114

–方案1:新增一个临时字段存放原始数据,修改完原字段后将数据恢复 –1.新增一个字符型字段 ALTER TABLE EMP ADD (AAA VARCHAR2(20)); –2.将MGR列中的数据复制到AAA字段中 UPDATE EMP SET AAA = MGR ; --隐式转换 :数值转字符 –3.将MGR置为空 UPDATE EMP SET MGR = ‘’; –4.修改MGR为字符型字段 ALTER TABLE EMP MODIFY (MGR VARCHAR2(20)); –5.将AAA列中的数据复制到MGR字段中 UPDATE EMP SET MGR = AAA ; –6.将AAA列删除 ALTER TABLE EMP DROP (AAA); SELECT * FROM EMP; –方案2:备份后清空原表,修改完字段属性后将数据插回 –1.备份EMP表 CREATE TABLE EMP_BAK AS SELECT * FROM EMP ; SELECT * FROM EMP_BAK; --确认备份情况 –2.清空EMP表的数据 TRUNCATE TABLE EMP; –3.修改原表的MGR的字段类型 ALTER TABLE EMP MODIFY MGR VARCHAR2(8) ; –4.将备份表数据恢复到原表 INSERT INTO EMP SELECT * FROM EMP_BAK ; SELECT * FROM EMP; –不良方案:仅备份MGR列 –1.备份EMP表中的MGR列 CREATE TABLE EMP_BAK AS SELECT MGR FROM EMP; SELECT * FROM EMP_BAK; --确认备份情况 –2.清空EMP表的MGR列 UPDATE EMP SET MGR = ‘’; –3.修改原表的MGR的字段类型 ALTER TABLE EMP MODIFY MGR VARCHAR2(8) ; –4.将备份表数据恢复到原表 INSERT INTO EMP(MGR) SELECT MGR FROM EMP_BAK ; SELECT * FROM EMP; –方案3:仅备份EMPNO字段和MGR字段,修改完MGR字段属性后,通过EMPNO字段匹配,恢复MGR字段的数据 –1.备份EMP表中的EMPNO字段和MGR字段 CREATE TABLE EMP_BAK AS SELECT EMPNO,MGR FROM EMP; SELECT * FROM EMP_BAK ; --确认备份表中的情况 –2.清空EMP表中的MGR列 UPDATE EMP SET MGR = ‘’; –3.修改原表中MGR列的字段类型 ALTER TABLE EMP MODIFY MGR VARCHAR2(4); –4.将备份表数据恢复到原表 UPDATE EMP SET MGR = (SELECT MGR FROM EMP_BAK WHERE EMP.EMPNO = EMPNO); --相关子查询的一种形式 MERGE INTO EMP USING EMP_BAK ON (EMP.EMPNO = EMP_BAK.EMPNO) WHEN MATCHED THEN UPDATE SET EMP.MGR = EMP_BAK.MGR ;

SELECT * FROM EMP;

–同时更新AAA字段和MGR字段 SELECT * FROM EMP; UPDATE EMP SET AAA = MGR , MGR = ‘’; UPDATE EMP SET MGR = ‘’ , AAA = MGR; –交换ENAME和JOB两字段中的内容 –放到一个UPDATE语句和分开放到两个UPDATE语句里区别是什么 –同时更新 UPDATE EMP SET ENAME = JOB , JOB = ENAME; –分别更新 UPDATE EMP SET ENAME = JOB ; UPDATE EMP SET JOB = ENAME ; –原理:更新时会使用回滚日志中的旧数据来更新到目标字段中

–将一行数据的所有字段全部更新为空,是否相当于删除了这一条数据 --否 CREATE TABLE EMP_BAK AS SELECT * FROM EMP ; SELECT * FROM EMP_BAK; UPDATE EMP_BAK SET EMPNO = ‘’,ENAME = ‘’,JOB = ‘’,MGR = ‘’, HIREDATE = ‘’,SAL = ‘’,COMM = ‘’, DEPTNO = ‘’/,ROWID = ‘’/ WHERE EMPNO = 7788;

最新回复(0)