在一个数据库中有俩个用户:A和B 我想把A用户的数据复制到B用户中 (B中已经定义好了A中表结构)
  我写了个储存过程: 主要代码
               sql_statments:='insert into :1 select * from :2';
                                 EXECUTE IMMEDIATE sql_statments using i_table_name,i_old_table_name;
其中  i_table_name是输入参数 代表B用户的表    i_old_table_name是输入参数 代表A用户的表 可以一直说表名无效   !! i_old_table_name的参数是 A.表名

解决方案 »

  1.   

    表名不能做为动态参数传入
    你可以使用动态拼接SQL方式
     i_old_table_name := 'A.tab1';
     i_table_name := 'tab1';
     sql_statments:='insert into '|| i_table_name||' select * from '|| i_old_table_name;
    EXECUTE IMMEDIATE sql_statments;
      

  2.   

    不用过程
    直接用b登录然后执行
    insert into tablename select * from a.tablename
    前提是b用户要有查询a的tablename的权限
      

  3.   


    ---表名 跟字段名 不能用绑定变量 就是因为多了' '   你想想就知道 只能||  sql_statments:='insert into '||i_table_name||' select * from '||i_old_table_name
                                     EXECUTE IMMEDIATE sql_statments;
      

  4.   

    我在同一个用户下 做实验成功了  但是当跨用户的时候 即i_old_table_name :=a.table时候 就 出错
    显示 表名或试图名不存在这是为什么啊