ORACLE|ORACLE 修改表中一列值名称及类型+date类型数据转为number
原创:转载请注明原地址。不足之处,欢迎各路大神批评指正,若有更好方法,欢迎提出来一起讨论,鞠躬。
需求场景:注意:在pl/sql代码块中执行dml语句需用动态sql,否则报ORA-06550错误
现有如下表格
文章图片
申请表
其中的registdate字段(类型为number)原始名称为registerdate,原始类型为date,形式为2017/10/26 15:14:53
,经过下述pl/sql代码将其进行转换为如图示结果。
执行步骤 1、将原有表中registerdate字段和application_id存入一张新建的临时表temp_registerdate中
create table temp_registerdate as select application_id id,registerdate from dus_applications;
2、修改dus_applications中registerdate字段名及类型
update dus_applications t set t.registerdate = null;
--将列中值改为空alter table dus_applicationsrename column registerdate to registdate;
--改名称alter table dus_applicationsmodify(registdate number);
--改类型commit;
【ORACLE|ORACLE 修改表中一列值名称及类型+date类型数据转为number】3、用转换为number的temp_regiserdate中的值替换修改后的dus_applications中对应列registdate中的值
declare
cursor cur1 is select application_id from dus_applications;
v_registerdate varchar(20);
v_update varchar(500);
v_drop varchar(200):='drop table temp_registerdate';
begin
for row1 in cur1 loop
select to_char(temp.registerdate,'yyyymmdd hh24:mi:ss') into v_registerdate from temp_registerdate temp where temp.id = row1.application_id;
v_update:='update dus_applications t set t.registdate=(to_number(to_date('''||v_registerdate||''',''YYYY-MM-DD HH24:MI:SS'')-TO_DATE(''1970-01-01 8:0:0'', ''YYYY-MM-DD HH24:MI:SS''))* 24 * 60 * 60 * 1000)';
dbms_output.put_line(v_registerdate);
dbms_output.put_line(v_update);
execute immediate v_update;
commit;
end loop;
execute immediate v_drop;
commit;
end;
推荐阅读
- 关于three.js修改直线页面没显示问题
- oracle|oracle java jdk install
- java|java b2b2c shop 多用户商城系统源码- config 修改配置
- iOS富文本为html时,修改默认字体颜色
- react-navigation|react-navigation 动态修改 tabBar 样式
- 数据技术|一文了解Gauss数据库(开发历程、OLTP&OLAP特点、行式&列式存储,及与Oracle和AWS对比)
- 8、Flask构建弹幕微电影网站-搭建后台页面-密码修改、主页控制面板
- javascript|vue使用js-xlsx导出excel,可修改格子样式,例如背景颜色、字体大小、列宽等
- ORACLE|ORACLE 12C ADG 之三A (DG 配置管理)
- minifilter中获取对文件修改属性的操作