繁体   English   中英

Oracle SQL:使用变量表名称和固定列名称进行更新

[英]Oracle SQL: Update with variable table name and fixed column name

我是SQL的初学者,但有一个问题:我的数据库中有大量的表。 一些表具有名为“ lab”的列。 在这些列中,我需要更改值。

所以我设法通过获取表的名称

SELECT CNAME,TNAME FROM SYSTEM.COL WHERE CNAME = 'LAB';

而且我知道我的更新命令

update TNAME set LAB='VALUE' WHERE LAB='OLDVALUE' 

但是我无法通过变量TNAME或其他方式连接这两个语句。 我尝试使用立即执行,但这对我没有好处。

如果是Oracle,则应执行以下操作:

BEGIN
    FOR cur_tabs_cols IN ( SELECT CNAME,TNAME FROM SYSTEM.COL WHERE CNAME = 'LAB'; )
    LOOP
        EXECUTE IMMEDIATE 'UPDATE ' || cur_tabs_cols.TNAME || ' SET LAB = ''VALUE'' WHERE LAB = ''OLDVALUE''';
    END LOOP;

    COMMIT;
END;

您将需要为此编写pl / sql。

第一件事是,请不要使用SYSTEM.COL 而是使用数据字典视图USER_TAB_COLSUSER_TAB_COLUMNS (如果在其他架构中,则为ALL_TAB_COLS

EXECUTE IMMEDIATE将是您想要的。

BEGIN
   FOR i IN (SELECT table_name
               FROM user_tab_cols
              WHERE column_name = 'LAB')
   LOOP
      EXECUTE IMMEDIATE
         'UPDATE ' || i.table_name || ' set LAB = :value where LAB = :oldvalue'
         USING 'value', 'oldvalue';
   END LOOP;
END;

您可以(并且应该)将绑定变量用于value和oldvalue,而不能用于表名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM