背景: 
本地存储过程P1完成2个任务: 
1.通过DBLINK调用远程数据库的存储过程P2,进行TRUNCATE   TABLE,并返回成功与否的标志。 
2.若成功,则对该表进行INSERT。 
说明:因为某些原因不能DELETE   TABLE,只能TRUNCATE。 现象: 
执行远程数据库上的存储过程P2,没有错误;但使用本地数据库的存储过程P1,就在调用远程数据库的语句处出现ORA-02064。当将远程数据库存储过程P2的TRUNCATE   TABLE语句修改为DELETE后,便没有问题。 提问: 
是不是调用远程数据库的存储过程或者函数等,不能含有TRUNCATE TABLE等类似操作?如果不行,那该怎么变通处理,来完成这样的操作呢?(不能用DELETE的前提)

解决方案 »

  1.   

    TRUNCATE属于DDL,Delete属于DML,可能dblink下你不能发出DDL,你可以写成EXECUTE IMMEDIATE 'TRUNCATE TABLE your_table';看看,如果还是不行,那就是Oracle本身的限制了吧?
      

  2.   

    EXECUTE   IMMEDIATE   'TRUNCATE   TABLE   your_table';
    这样的语句我当然也试过不行,这样的限制是不是有什么安全性的考虑呢?如果不是,那会不会是BUG,是不是有ORACLE补丁可以打呢?难道我只能用DELETE?