yk156511 发表于 2022-3-18 11:22

SQL游标

同一个字段A,批量修改所涉及到的表。
现在有一个字段AA=13 想在的需求是把所有涉及到字段A的表13改为另一个值
单表修改是 update table set A=X where A=13
现在写循环 来把所有A字段的表值修改 要怎么写啊。

夏汉森 发表于 2022-3-18 11:41

select t.table_name from user_tab_columns t where column_name = 'A'
把查询结果放进游标里

yk156511 发表于 2022-3-18 11:47

夏汉森 发表于 2022-3-18 11:41
select t.table_name from user_tab_columns t where column_name = 'A'
把查询结果放进游标里

declare
v_s          varchar2(2000);
v_table_name varchar(100);
cursor c1 is
    select distinct m_table from oa2_mapped where m_field = 'FWXZ';
begin
open c1;
loop
    fetch c1
      into v_table_name;
    exit when c1%notfound;
请问下面的update 应该怎么写呢。

夏汉森 发表于 2022-3-18 11:51

v_s := 'update ' || v_table_name|| ' set A=X where A=13 ' ;
execute immediate v_s;

夏汉森 发表于 2022-3-18 11:52

yk156511 发表于 2022-3-18 11:47
declare
v_s          varchar2(2000);
v_table_name varchar(100);


看4楼内容

yk156511 发表于 2022-3-18 12:28

夏汉森 发表于 2022-3-18 11:52
看4楼内容

哪里的问题啊

夏汉森 发表于 2022-3-18 13:49

yk156511 发表于 2022-3-18 12:28
哪里的问题啊

你 fwxz 列不是数值类型吧

yk156511 发表于 2022-3-18 13:59

夏汉森 发表于 2022-3-18 13:49
你 fwxz 列不是数值类型吧

夏汉森 发表于 2022-3-18 14:32

yk156511 发表于 2022-3-18 13:59


v_s := 'update ' || v_table_name|| ' set A=X where A= ' ||'''' || 13 || '''' ;

yk156511 发表于 2022-3-18 14:41

yk156511 发表于 2022-3-18 13:59


可以执行了,另外请教下。为什么要加这个来执行啊。 只在拼接中用到过这个。谢谢啦。
页: [1] 2
查看完整版本: SQL游标