根据另一个表中行的值重命名一个表的列

时间:2016-05-08 09:25:29

标签: oracle11g toad

例如,我有两个表 - Table1和Table2

表1,列Q1,Q2和Q3。

Q1  Q2  Q3 Map_id
11  23  34  11101
22  22  22  11102 

表2,列refvalue,actualvalue

refvalue    actualvalue     Map_id
    Q1  Remaining           11101
    Q2  Utilized        11101
    Q3  Actual          11101
    Q1  Remaining1      11102
    Q2  Utilized1   11102
    Q3  Actual1 11102

现在我想将Table1的column_name替换为Table2中的相应值。

示例:

select Q1 as "Remaining", Q2 as "Utilized", Q3 as "Actual"
from Table1;

现在这是硬编码,如何使其合乎逻辑?我不知道如何处理这个问题,而且我是oracle的新手。

版本:Oracle11g 客户:Toad

2 个答案:

答案 0 :(得分:1)

虽然这是非常糟糕的关系设计,我建议你改变它,可以用WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); if (wifiInfo != null) { Integer linkSpeed = wifiInfo.getLinkSpeed(); //measured using WifiInfo.LINK_SPEED_UNITS Toast.makeText(getApplicationContext(),linkSpeed.toString(),Toast.LENGTH_LONG).show(); } 完成,类似这样的事情:(也许稍微调整一下)

PL/SQL

这将生成您需要的SQL

答案 1 :(得分:0)

  1. 创建一个日志表DDL_LOG_TAB。
  2. 使用隐式游标遍历Table2中的记录。
  3. 对于Table2中的每条记录,构建一个字符串语句“ALTER TABLE TABLE1 RENAME COLUMN rec.refvalue TO rec.actualvalue”,其中rec引用隐式游标中的每条记录。
  4. 在循环内部,将每个生成的语句插入DDL_LOG_TAB。
  5. 现在,您在新的DDL_LOG_TAB中拥有所有必需的DDL。只需选择SQL并将其作为动态SQL执行即可。

    您甚至可以即兴创建此新表来保存执行时间戳(开始和结束TS),错误消息或成功标志。将来你可以使用这个表,

    一个。生成并执行任何类型的DDL。 湾引用过去按时间顺序执行的DDL的历史。 C。如果任何DDL错误输出并且执行停止,您可以修复错误并从故障点重新开始执行。

    希望这对现在以及将来都有所帮助。祝你好运。