使用SQL

时间:2015-10-05 06:54:06

标签: sql oracle oracle11g

在某些版本升级期间,我在Oracle DB中迁移数据时遇到问题。

案例:

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

我需要一个Oracle SQL查询,它根据TMP中的coulmns大小将TMP表中的数据复制到实际表中,其中我暂时存储了数据(必须这样做)。

以下是我尝试的查询,但它无法正常工作。

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
);

请在这方面提供帮助,如果有更好的方法,请告诉我。

1 个答案:

答案 0 :(得分:2)

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

  1. 您无法确定在运行时插入语句的参数数量。您必须在创建插入语句之前确定它。
  2. 案例仅返回1个值。不止于此,你会得到错误 too many values
  3. 所以你应该

    • 创建存储过程
    • 使用if else并基于创建插入语句 那。
    • Execute immidiate
    • 执行

    上一页。响应

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