oracle批量为表增删字段

来源:互联网 发布:mysql while do 编辑:程序博客网 时间:2024/06/01 07:51
create or  replace procedure add_column as
--declare在oracle中指代的是“块”,用于处理一段业务逻辑的


--declare
  --动态表表名前缀  
  tbl_name_prefix nvarchar2(255);
  --表名  
  tbl_name nvarchar2(255);
  --字段  
  add_column_name nvarchar2(255) := 'code_ssqx';
  --存放sql语句的字符串  
  sql_str nvarchar2(500);
  --字段是否已存在  
  is_exist number := 0;


  c_name number;
  ret    number;
  --记录动态表的的数量  
  mt_counter number := 0;


begin


  for tbl_name_record in (select table_name
                            from USER_TABLES
                           where table_name like 'ZHZS_%') loop
    mt_counter := mt_counter + 1;
    dbms_output.put_line('tbl_name: ' || tbl_name_record.table_name);
-- oracle cols 查询表字段类型及长度 function 
    select count(column_name)
      into is_exist
      from cols
     where table_name = upper(tbl_name_record.table_name)
       and column_name = upper(add_column_name);
  
    if (is_exist = 0) then
      dbms_output.put_line('字段 [' || add_column_name || '] 在表' ||
                           tbl_name_record.table_name || '中不存在');
      sql_str := 'alter table ' || tbl_name_record.table_name || ' add ' ||
                 add_column_name || ' varchar2(50) ';
      dbms_output.put_line('添加列, 动态执行DDL语句: ' || sql_str);
    
      ---动态执行DDL语句  
      --execute immediate sql_str;  
      c_name := dbms_sql.open_cursor;
      dbms_sql.parse(c_name, sql_str, dbms_sql.native);
      ret := dbms_sql.execute(c_name);
      dbms_sql.close_cursor(c_name);
    
    else
      dbms_output.put_line('字段 [' || add_column_name || '] 已经存在于表' ||
                           tbl_name_record.table_name || '中');
    end if;
  end loop;


  dbms_output.put_line('共有: [' || mt_counter || '] 个动态表。');

end add_column;


删除字段类似操作

0 0
原创粉丝点击