gpt4 book ai didi

oracle - 更新 Oracle 中所有表中的所有行

转载 作者:行者123 更新时间:2023-12-05 03:13:07 24 4
gpt4 key购买 nike

我有一个字段 (clientID) 在我的大多数表中重复出现(大约 100 个左右),我正在尝试使用 oracle 11g 一次更新它。我能够获取表的名称,但无法使用它。来自以下代码:

BEGIN
FOR Name IN ( SELECT TABLE_NAME FROM SYS.all_tables where TABLESPACE_NAME='MyTableSpace') LOOP
DBMS_OUTPUT.PUT_LINE(Name.TABLE_NAME); --I can't see any logs on DBMS Output for some reason
-- Update Name.TABLE_NAME set ClientID = 1 Where ClientID = 2; --This line does not work message "Table or view does not exist"
END LOOP;
END;

最佳答案

您可以使用 EXECUTE IMMEDIATE 尝试使用动态 SQL。

像这样:

BEGIN
FOR Name IN ( SELECT TABLE_NAME FROM SYS.all_tables where TABLESPACE_NAME='MyTableSpace') LOOP
DBMS_OUTPUT.PUT_LINE(Name.TABLE_NAME); --I can't see any logs on DBMS Output for some reason
EXECUTE IMMEDIATE 'Update ' || Name.TABLE_NAME || ' set ClientID = 1 Where ClientID = 2';
END LOOP;
END;

如果需要设置动态更新的值,可以通过动态sql绑定(bind)参数的方式。我只是不记得如何去做。但是,如果您需要它,请在评论中提问,我会寻找它。

编辑

我想如果你要绑定(bind)值,它看起来像这样:

BEGIN
FOR Name IN ( SELECT TABLE_NAME FROM SYS.all_tables where TABLESPACE_NAME='MyTableSpace') LOOP
DBMS_OUTPUT.PUT_LINE(Name.TABLE_NAME); --I can't see any logs on DBMS Output for some reason
EXECUTE IMMEDIATE 'Update ' || Name.TABLE_NAME || ' set ClientID = :1 Where ClientID = :2'
USING 1, 2;
END LOOP;
END;

...您可以使用变量而不是硬编码常量值,而不是 USING 1, 2

更多信息:EXECUTE IMMEDIATE .

编辑 2

如果您需要跳过没有相关列的表,这里是应该完成这项工作的调整查询:

BEGIN
FOR Name IN (
SELECT t.TABLE_NAME
FROM all_tables t
where t.TABLESPACE_NAME='MyTableSpace'
and exists (
select null
from all_tab_columns c
where c.table_name = t.table_name
and c.column_name = 'CLIENTID' -- put the right column name here
)
) LOOP
DBMS_OUTPUT.PUT_LINE(Name.TABLE_NAME); --I can't see any logs on DBMS Output for some reason
EXECUTE IMMEDIATE 'Update ' || Name.TABLE_NAME || ' set ClientID = 1 Where ClientID = 2';
END LOOP;
END;

您可能需要稍微调整一下,因为我面前没有 Oracle 数据库。我可能拼错了一些东西。

关于oracle - 更新 Oracle 中所有表中的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31258107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com