oracle批量为表增删字段

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值