2015-10-05 64 views
0

在某些版本升级期间,Oracle数据库中的数据迁移有问题。使用SQL在Oracle数据库中迁移数据

案例:在发布1

  • 表X有三个coulmns。
  • 与第2版相同的表X有5列(两个在版本2中添加)。
  • 中释放3同表有五列中释放2.
  • 升级路径包括版本1到版本32版第3版

我需要它拷贝数据从TMP表,实际的表的基础上,从TMP coulmns大小两种情况下我暂时存储的数据(这必须做)一个的Oracle SQL查询。

下面是我试过的查询,但它不工作。

insert into USER.X values 
(CASE (select count(*) from all_tab_columns where table_name='TMP') 
WHEN '3' THEN (select USER.TMP.*, null NEWCOL1 from USER.TMP, null NEWCOL2 from USER.TMP) 
WHEN '5' THEN (select USER.TMP.* from USER.TMP) 
END 
); 

请帮忙在这方面,如果有更好的方法做同样的事请让我知道。

+0

不工作?通常它有助于发布确切的错误。尽管我可以说这是一个罕见的情况。而不是'值(a,b,c);'使用'从偶数中选择a,b,c;' –

回答

2

编辑: 你的逻辑有许多问题。

  1. 无法确定在运行时插入语句的参数数量。您必须在创建插入语句之前确定它。
  2. 个案只返回1个值。更重要的是,你会得到错误 too many values

所以,你应该

  • 创建存储过程
  • 使用的if else并创建一个基于 是INSERT语句。
  • 通过Execute immidiate

上一个执行它。响应

第一个问题在您的查询是select count(*) from all_tab_columns where table_name='TMP'返回一个整数,而在case你比较它与'3''5'为varchar。因此,假设您的其余查询返回结果正确,请尝试将'3''5'替换为35

+0

@ Nick.McDermaid:我改变了建议 INSERT INTO USER。x值 ( CASE (SELECT COUNT(*)FROM ALL_TAB_COLUMNS在表格名= 'TMP' ) WHEN 3 THEN (SELECT USER.TMP。*,NULL NEWCOL1,NULL NEWCOL2 FROM USER.TMP ) WHEN 5 THEN (SELECT USER.TMP * FROM USER.TMP 。) END );' 但我得到下面的错误: 错误在命令行:2列:53 错误报告: SQL错误:ORA-00947:数值不够 00947. 00000 - “值不足” *原因: *操作: – user2363332

+0

编辑答案以解释您的查询出了什么问题。 – Utsav