如何在触发器或存储过程中实现变量数据表
有一个需求,需要通过数据库系统级别实现向一组表中的一张插入数据,具体如下:
1、定义一张表(命名为Tbl_List),存储了若干张表的表名
2、定义了一张表(命名为A),促出了一个集团公司的物料库存情况表
3、定义若干张数据表(M_a,M_b,M_c .......),分别存储集团公司下的每个子公司的库存情况
4、平时应用系统所有物料的移动,直接对A 进行Insert ,Update,delete等,现在需要把对A进行的所有的操作,通过Tbl_List中的逻辑关系,对应的传播到M_a,或者M_b,或者M_c中
 
这个问题放了很久了,大家不妨讨论下,我的理解是这样
建立表tbl_list,字段有com_name,com_table,即公司名和该公司所对应的表名,也就是后面所说的子公司的库存表
 create table tbl_list(com_name varchar2(20) null,com_table varchar2(20) null);
 
 create table m_a(num numeric(8,3) null);
 
 create table m_b(num numeric(8,3) null);
 insert into tbl_list values('01','m_a');
 insert into tbl_list values('02','m_b');
 这里只写如何根据条件来对表进行修改
create or replace function fun_update(
  as_com_name char, --需要修改的子公司名称
  as_num      numeric, --修改数量
  as_type     char)  --操作类型(修改、新增、删除)
  Return char
  is
  is_sql    varchar2(2000);
  is_table  varchar2(25);
  is_return varchar2(25);
begin
  Begin
      select com_table
        into is_table
        from tbl_list
       where upper(com_name) = upper(as_com_name);
      if as_type = 'u' then
        is_sql := 'update ' || is_table || ' set num = ' || as_num || ' ';
      Else
        if as_type = 's' then
          is_sql := 'select num from ' || is_table || '';
        else
          if as_type = 'i' then
            is_sql := 'insert into ' || is_table || ' values ( ' || as_num || ' )';
          else
            is_sql := 'delete from ' || is_table || '';
          end if;
        end if;
      end if;   
       Execute Immediate is_sql;
          Is_Return := 'success';
          Commit;
       Exception When Others Then
          Rollback;
          Is_Return := 'error';
       End;  
   Return Is_Return;
end;