Oracle如何在将一个数据库中的所有表都加上某些字段。

2024-11-12 00:27:52
推荐回答(3个)
回答1:

需要用存储过程解决。

如数据库中存在两张表,要给两张表都增加两个同样名称同样属性的字段,需要用以下代码:

1、创建测试用表test和test1

create table test
(id int,
name varchar2(10));

create table test1
(id int,
name varchar2(10));

2、要为两个表同时增加id1和name1字段。使用代码:

declare 
v_sql varchar2(2000);
v_table_name varchar2(30);
cursor c1 is select table_name from user_tables;
begin
open c1;
loop --提取一行数据到c1
fetch c1 into v_table_name;
--判读是否提取到值,没取到值就退出
--取到值c_job%notfound 是false 
--取不到值c_job%notfound 是true
exit when c1%notfound;
v_sql:='alter table '||v_table_name||' add id1 int';
execute immediate v_sql;
v_sql:='alter table '||v_table_name||' add name1 varchar2(10)';
execute immediate v_sql;
end loop;--关闭游标
close c1;
end;

如图:

3、执行代码,成功无误后,查询test表和test1表结构:

回答2:

你的思路有点不准确,使用下面的语句就没有问题了
select distinct a.TABLE_NAME from user_tab_columns a where a.TABLE_NAME not in (SELECT b.TABLE_NAME from user_tab_columns b where b.COLUMN_NAME=‘MODIFIER’);
仔细想想你就明白为什么你写的不对了,希望能够解答你的疑惑。

提示:你并没有把包含指定列的表的情况除去

回答3:

declare
vstr_sql varchar2(2000);
cursor c1 is select distinct a.TABLE_NAME TABLE_NAME from user_tab_columns a
where a.TABLE_NAME not in (SELECT b.TABLE_NAME from user_tab_columns b where b.COLUMN_NAME=‘MODIFIER’);
begin
for rec in c1 loop
vstr_sql varchar2(2000):='alter table '||rec.TABLE_NAME||' add MODIFIER NVARCHAR2(120) not null)';
execute immediate vstr_sql;
end loop;
end;