这是一个非常精确的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”
任何帮助都将不胜感激。
答案 0 :(得分:1)
不幸的是,你无法做这样的子查询。您最好的选择是使用PHP或您的主要脚本语言,并查询数据库为您构建所有SQL语句。