使用子查询对列名执行SQL更新

时间:2011-05-04 06:03:59

标签: sql oracle

这是一个非常精确的SQL,我知道,但基本上是我工作的数据输入猴子之一,并且副本已深入到我们的系统中。

如果另一个值等于VAL3,则有相当多的表需要将值从VAL1更改为VAL2。问题是我不知道所有表都是这种情况,并且有严格的列命名策略,这意味着所有表都有唯一的列名。

我编写了以下SQL来尝试进行此更新,但它不起作用:

UPDATE 
 (SELECT DISTINCT TABLE_NAME AS tbTableName 
  FROM ALL_TAB_COLUMNS 
  WHERE COLUMN_NAME LIKE '%MAJR%')
SET 
 (SELECT COLUMN_NAME AS tbColumnName 
  FROM tbTableName 
  WHERE COLUMN_NAME LIKE '%MAJR%') = 'VAL2'
WHERE 
 (SELECT COLUMN_NAME AS tbColumnNameWhere 
  FROM tbTableName 
  WHERE COLUMN_NAME LIKE '%PROGRAM%') = 'VAL3'
 AND tbColumnName = 'VAL1';

但是,这会因错误而失败:user.table.column,table.column或列规范无效 01747. 00000 - “user.table.column,table.column或column specification invalid”

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

不幸的是,你无法做这样的子查询。您最好的选择是使用PHP或您的主要脚本语言,并查询数据库为您构建所有SQL语句。