构造好后,使用动态SQL来执行create or replace procedure name_pro(p_table varchar2) as str varchar2(50); begin str:='alter table '||p_table||'(a varchar2(10))';--grant create any table to you_userexecute immediate str; end; /
如p_table = A_B_D_E 和 p_col = D_E_AREA_ID number default XX 这两变量是自己构造的,剩下工作就自己取构造 create or replace procedure name_pro(p_table varchar2,p_col varchar2) as str varchar2(50); begin str:='alter table '||p_table||' add ('||p_col||')'; execute immediate str; end; /
to LGQDUCKY(飘): 不是这样的一个一个去执行,那就不叫动态了。 而是用一个存储过程把所有的表都更新,也不需要传人什么变量。 关键是如何实现默认值的赋值问题...........
--用你表所属的用户登录: set heading off set feedback off spool e:sql.sql select 'alter table '||table_name||' add colum(substr('||table_name||',5,3)'||'_Area_ID,number(10)))' from user_tables; spool off set heading on set feedback on start e:sql.sql
--更新数据 update table set ..._Area_ID=(select a.area_id from A_B_C_INFO a where id=table.id and table.id is not null) --也可以像上面那样批量处理,把这句代码换上去就可以,你应该会吧
--居然忘了加限定条件: set heading off set feedback off spool e:sql.sql select 'alter table '||table_name||' add colum(substr('||table_name||',5,3)'||'_Area_ID,number(10)))' from user_tables where table_name like 'A/_B/_%' escape '/'; spool off set heading on set feedback on start e:sql.sql
as
str varchar2(50);
begin
str:='alter table '||p_table||'(a varchar2(10))';--grant create any table to you_userexecute immediate str;
end;
/
能否帮忙解决一下to LGQDUCKY(飘)
你这样写,我都不用上来求救了。
这两变量是自己构造的,剩下工作就自己取构造
create or replace procedure name_pro(p_table varchar2,p_col varchar2)
as
str varchar2(50);
begin
str:='alter table '||p_table||' add ('||p_col||')';
execute immediate str;
end;
/
不是这样的一个一个去执行,那就不叫动态了。
而是用一个存储过程把所有的表都更新,也不需要传人什么变量。
关键是如何实现默认值的赋值问题...........
set heading off
set feedback off
spool e:sql.sql
select 'alter table '||table_name||' add colum(substr('||table_name||',5,3)'||'_Area_ID,number(10)))' from user_tables;
spool off
set heading on
set feedback on
start e:sql.sql
update table set ..._Area_ID=(select a.area_id from A_B_C_INFO a where id=table.id and table.id is not null)
--也可以像上面那样批量处理,把这句代码换上去就可以,你应该会吧
set heading off
set feedback off
spool e:sql.sql
select 'alter table '||table_name||' add colum(substr('||table_name||',5,3)'||'_Area_ID,number(10)))' from user_tables
where table_name like 'A/_B/_%' escape '/';
spool off
set heading on
set feedback on
start e:sql.sql