2017-10-04 92 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

相关问题