在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名称由现有对象使用”。我哪里错了?
答案 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...}
添