VBA中现有对象已使用的名称

时间:2011-03-10 12:04:16

标签: oracle vba excel-vba oracle10g excel

在VBA中,我试图使用OraDynaSet对象创建一个临时表,并在将其用于另一个选择之前获取一些数据。

strSQL = "create table user1.new12 as(" _
    & "Select lca.coupon_upc,lca.division from  lca where lca.campaign_id = " & campaign_id & "" _
    & "MINUS " _
    & " Select mcr.coupon_upc,mcr.division from  mcr where mcr.campaign_id = " & campaign_id & ")"
    Set OraDynaSet = objdatabase.DBCreateDynaset(strSQL, o&)

我已经打开了与用户user1的连接,在执行此DDL之前执行了许多选择查询。现在,当我执行VBA代码时,它会抛出错误“ORA:009955名称由现有对象使用”。我哪里错了?

2 个答案:

答案 0 :(得分:1)

该表已存在。您不是创建临时表而是创建标准表:它将在脚本结束后保留​​在数据库中。如果您已经运行此脚本并且尚未删除该表,则以下执行将失败。

在Oracle Global temporary table中是包含临时数据的持久对象。在大多数情况下,如果您需要定期使用临时表(因为它是循环过程的一部分),您只需创建一次表。

答案 1 :(得分:0)

如果您只是将该临时表用于单个后续查询,那么使用“内联视图”可能更容易:

select t.coupon_upc, t.division from
   (select lca.coupon_upc,lca.division from  lca where lca.campaign_id = campaign_id
     MINUS 
    select mcr.coupon_upc,mcr.division from  mcr where mcr.campaign_id = campaign_id) t
 where {clauses here...}