Oracle如何在将一个数据库中的所有表都加上某些字段。
1.如何查出数据库中所有表中不包含MODIFIER字段的表,selectdistinctTABLE_NAMEfromuser_tab_columnsawherea.COL...
1.如何查出数据库中所有表中不包含MODIFIER字段的表,
select distinct
TABLE_NAME from user_tab_columns a
where a.COLUMN_NAME <> 'MODIFIER' 得到的值为什么不正确。
2.我如何将得到的一组表同时加上MODIFIER NVARCHAR2(120)字段,即用得到的表结果集来替换下列语句中的表名。
declare
vstr_sql varchar2(2000):='alter table 表名 add MODIFIER NVARCHAR2(120) not null)';
begin
execute immediate vstr_sql;
end;
希望各位指教,3Q. 展开
select distinct
TABLE_NAME from user_tab_columns a
where a.COLUMN_NAME <> 'MODIFIER' 得到的值为什么不正确。
2.我如何将得到的一组表同时加上MODIFIER NVARCHAR2(120)字段,即用得到的表结果集来替换下列语句中的表名。
declare
vstr_sql varchar2(2000):='alter table 表名 add MODIFIER NVARCHAR2(120) not null)';
begin
execute immediate vstr_sql;
end;
希望各位指教,3Q. 展开
3个回答
展开全部
需要用存储过程解决。
如数据库中存在两张表,要给两张表都增加两个同样名称同样属性的字段,需要用以下代码:
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表结构:
展开全部
你的思路有点不准确,使用下面的语句就没有问题了
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’);
仔细想想你就明白为什么你写的不对了,希望能够解答你的疑惑。
提示:你并没有把包含指定列的表的情况除去
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’);
仔细想想你就明白为什么你写的不对了,希望能够解答你的疑惑。
提示:你并没有把包含指定列的表的情况除去
追问
我没弄清楚user_tab_columns视图包含的字段意义,谢谢了!现在理清楚了。
追答
嗯,思路很重要
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
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;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询