2011-03-10 41 views
0

在VBA中,我嘗試使用OraDynaSet對象創建臨時表並在將其用於其他選擇之前將一些數據提取到該表中。VBA中現有對象已使用的名稱

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之前執行多個select查詢。現在,當我執行VBA代碼時,它會拋出一個錯誤「ORA:009955名稱被現有對象使用」。我哪裏錯了?

回答

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...} 

1

該表已存在。您不是創建臨時表表,而是創建一個標準表:在腳本結束後它將保留在數據庫中。如果您已經運行了這個腳本,並且您還沒有刪除該表,那麼以下執行將會失敗。

在Oracle Global temporary table中是包含臨時數據的持久對象。在大多數情況下,如果您需要定期使用臨時表(因爲它是經常性過程的一部分),您只需創建一次表。

+0

它不是一個臨時表。我只是說我在VBA代碼中將它用作臨時表。 – Suman 2011-03-10 13:21:59

+0

@suman:通過SQL * Plus與用戶'user1'連接,並查找對象'new12':'SELECT * FROM user_objects WHERE object_name ='new12'' – 2011-03-10 13:50:25

相關問題