2017-10-04 120 views
0

IHAVE創建一個進程這樣如何在oracle的存儲過程中使用create table和drop table DDL語句。

create or replace PROCEDURE RMD_Tables AS 
Begin 

execute immediate 'Drop table a608232_new_62K_master'; 

execute immediate 'create table a608232_new_62K_master as select A.* from 
a608232_MRD_DATA_62K_W_Account A inner join a608232_new_mids B 
on A.MID = B.MID'; 

execute immediate'drop table a608232_web_abt_qlik_data'; 

execute immediate 'create table a608232_web_abt_qlik_data as select 
lv2.IP,SESSION_ID,PAGENAME,VSCHANNEL,VSSEARCHPHRASE,click_date, 
EXTRACT(YEAR FROM click_date)"YEAR",EXTRACT(MONTH FROM 
click_date)"MONTH",EXTRACT(DAY FROM 
click_date)"DAY",wb.CLICK_HR,wb.CLICK_MIN, 
RANK() OVER(PARTITION BY SESSION_ID ORDER BY SESSION_CLK_SEQ_NBR ASC) 
SESSION_RANK 
from abc wb 
right outer join A608232.a608232_new_62K_master lv2 on wb.IP = lv2.IP WHERE 
click_date >= TO_DATE(''25-SEP-2017'',''DD-MON-YYYY'') AND 
vschannel=''aaaa'' ' ; 

END; 

當我執行這個程序我的第一張表都被丟棄/在那之後我收到此錯誤味精後,這是獲得執行

Connecting to the database CWE_Nexedia. 
ORA-01031: insufficient privileges 
ORA-06512: at "A608232.RMD_TABLES", line 6 
ORA-06512: at line 2 
Process exited. 
Disconnecting from the database CWE_Nexedia. 

我首先聲明我面臨着問題。 我正在這樣做,因爲我想安排一個每天運行的作業來更新這些表格。所有的

+0

你對該消息的解釋是什麼?ORA-01031:權限不足?另外,爲什麼不簡單地替換表格的內容而不是刪除並創建它? –

+0

@DanBracuk我擁有previledges,當我運行它時,我可以運行並創建它。替換選項你如何建議我這樣做 – PriyalChaudhari

+0

要替換內容,使用兩個查詢。第一個將是一個刪除,第二個將是一個插入。 –

回答

0

首先,我建議使用q'{}'以避免重複''例如:

execute immediate q'{create table a608232_web_abt_qlik_data as select 
lv2.IP,SESSION_ID,PAGENAME,VSCHANNEL,VSSEARCHPHRASE,click_date, 
EXTRACT(YEAR FROM click_date)"YEAR",EXTRACT(MONTH FROM 
click_date)"MONTH",EXTRACT(DAY FROM 
click_date)"DAY",wb.CLICK_HR,wb.CLICK_MIN, 
RANK() OVER(PARTITION BY SESSION_ID ORDER BY SESSION_CLK_SEQ_NBR ASC) 
SESSION_RANK 
from abc wb 
right outer join A608232.a608232_new_62K_master lv2 on wb.IP = lv2.IP WHERE 
click_date >= TO_DATE('25-SEP-2017','DD-MON-YYYY') AND 
vschannel='aaaa' }' ; 

二:

權限不足

這是很清楚的錯誤消息。您必須確保您擁有CREATE TABLE的特權並從特定表格中讀取。


你也可以考慮其他的選擇:

  • TRUNCATE TABLE和INSERT INTO
  • 創建物化視圖並刷新每日

編輯:

我有條款。當我單獨運行創建表時,我運行並創建了表

當您在存儲過程中使用動態SQL時,您使用調用者/調用者的權限執行它。我懷疑這是報道和有限的特權。

+0

我有條款。當我分別運行創建表時,我運行並創建表 – PriyalChaudhari

+0

應該怎樣工作這個建議? – PriyalChaudhari

相關問題