如何在oracle的存储过程中使用create table和drop table DDL语句。
问题描述:
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.
我首先声明我面临着问题。 我正在这样做,因为我想安排一个每天运行的作业来更新这些表格。所有的
答
首先,我建议使用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
你对该消息的解释是什么?ORA-01031:权限不足?另外,为什么不简单地替换表格的内容而不是删除并创建它? –
@DanBracuk我拥有previledges,当我运行它时,我可以运行并创建它。替换选项你如何建议我这样做 – PriyalChaudhari
要替换内容,使用两个查询。第一个将是一个删除,第二个将是一个插入。 –