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.
展开
 我来答
badkano
2015-09-14 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144777 获赞数:885365
团长

向TA提问 私信TA
展开全部

需要用存储过程解决。

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

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表结构:

一滴清茗
2013-01-12 · TA获得超过106个赞
知道答主
回答量:70
采纳率:0%
帮助的人:94.5万
展开全部
你的思路有点不准确,使用下面的语句就没有问题了
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视图包含的字段意义,谢谢了!现在理清楚了。
追答
嗯,思路很重要
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
greenhill9
2013-01-12 · 超过37用户采纳过TA的回答
知道答主
回答量:115
采纳率:0%
帮助的人:107万
展开全部
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;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式