用PL/SQL语句改掉所有表中包含一个字段的语句 问题

taoy_2008 2008-11-07 04:06:56

问题事这样的,因为某个代码中包含字段,这个字段牵连到的表很多,如果再ORACLE中更改的话的确很慢会,而且会漏,所有想用这个语句彻底改变,
就是把所有表中Numbercode的值从原来的29改为现在的90,下面的事我自己写的,但是有问题,请高手不啬赐教.
declare
vsql varchar2(200);
cursor c1 is
update 'update table '||table_name||' cascade constraints' v_name
from all_tables where tablespace_name='numbercode';

BEGIN
for i in c1 loop
vsql:=i.v_name;
execute immediate vsql;
end loop;
end;
...全文
127 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
codearts 2008-11-08
  • 打赏
  • 举报
回复
sql>spool update.sql
sql>select 'update table ' || table_name || ' set Numbercode=90 where Numbercode=29;'
from user_tables;
sql>spool off;

然后找到生成的脚本update.sql, 执行之。
sjq521521 2008-11-08
  • 打赏
  • 举报
回复
游标可以用update 语句?
我怎么看不懂呢?
爱莫能助!
bsh_ly 2008-11-07
  • 打赏
  • 举报
回复

DECLARE v_tablename varchar2(50);
v_sql varchar2(4000);
begin
FOR v_tablename in ( select distinct table_name from user_tab_columns where COLUMN_NAME ='NUMBERCODE') LOOP
BEGIN
v_sql := ' UPDATE' || v_tablename || ' SET NUMBERCODE = 90 WHERE NUMBERCODE =23 ';
--DBMS_OUTput.put_line(v_sql);
execute immediate v_sql;
END;
END LOOP;
END;

范佩西_11 2008-11-07
  • 打赏
  • 举报
回复
你那根本就不对:
直接写语句,因为你几张表存在关联所以要注意删除的顺序
update t1 set Numbercode=90 where Numbercode=29;
update t2 set Numbercode=90 where Numbercode=29;
update t3 set Numbercode=90 where Numbercode=29;
update t4 set Numbercode=90 where Numbercode=29;

taoy_2008 2008-11-07
  • 打赏
  • 举报
回复
也许不对,不要看我的那个,不要受我影响.
mao723309240hed 2008-11-07
  • 打赏
  • 举报
回复
游标可以用update 语句?
我怎么看不懂呢?
爱莫能助!

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧