通过数据字典来查询表的字段,写一个存储过程输入一个表名然后把列存进一个表中

create or replace package body PACK_ADD_COLUMN is

procedure p_add_column(
     P_IN_TABLENAME IN VARCHAR2 DEFAULT NULL,
     P_OUT_STATUS OUT VARCHAR2
  )
   as
  /* P_OUT_STATUS:='ok';*/
   v_sql varchar2(10000) default '';
   v_table_name varchar2(100) default '';
   v_columu_name varchar2(100) default '';
   v_data_type varchar2(100) default '';
   v_table_name_sql varchar2(100) default '';
    v_type_flag varchar2(10);
    v_pk_flag varchar2(10);
    v_zl_flag varchar2(10);
   
begin
P_OUT_STATUS:='OK';
  for j in (select
     c.table_name,c.column_name,c.data_type
     from user_tab_columns c
     where c.table_name in upper(''||P_IN_TABLENAME||''))
LOOP
     v_type_flag:='0';
     v_pk_flag:='0';
     v_zl_flag:='0';
     v_table_name:=j.table_name;
     v_columu_name:=j.column_name;
     v_data_type:=j.data_type;
   
     v_table_name_sql:='TB_OBJECT_'||substr(v_table_name,9,13);
     IF j.data_type='CLOB' THEN
       v_type_flag:='1';
       END IF;
     IF j.column_name='OB_OBJECT_ID' THEN
       v_pk_flag:='1';
       END IF;
     IF j.column_name='PROGRESS' or  j.column_name='RP_ACTION' or  j.column_name='RP_GEN_DATETIME'
      THEN v_zl_flag:='1';
      END IF;
   
   v_sql:='insert into wind_synctable
     values ('''||v_table_name||''','''||v_columu_name||''','''|| v_type_flag||''',''WDdb2'','''|| v_table_name_sql||''','''||v_columu_name||''',''MSSQL_WDDB'','''||v_pk_flag||''','''||v_zl_flag||''')';
      EXECUTE IMMEDIATE v_sql;        
   commit;
  
   end loop;

  exception
  
    when others then
      P_OUT_STATUS:='FALSE';
      rollback;
      raise;
 END p_add_column;
end PACK_ADD_COLUMN;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值