这个应该是用动态SQL来执行,表名和字段名则考虑写函数来处理.

解决方案 »

  1.   

    构造好后,使用动态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;
    /
      

  2.   

    对啊,就是用动态的sql能处理。
    能否帮忙解决一下to LGQDUCKY(飘)
    你这样写,我都不用上来求救了。
      

  3.   

    如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;
    /
      

  4.   

    to  LGQDUCKY(飘):
    不是这样的一个一个去执行,那就不叫动态了。
    而是用一个存储过程把所有的表都更新,也不需要传人什么变量。
    关键是如何实现默认值的赋值问题...........
      

  5.   

    --用你表所属的用户登录:
    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
      

  6.   

    --更新数据
    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)
    --也可以像上面那样批量处理,把这句代码换上去就可以,你应该会吧
      

  7.   

    --居然忘了加限定条件:
    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