2017-10-04 15 views
0

Ihave a créé un proc comme celui-ciComment utiliser create table et supprimer des instructions DDL de table dans proc stocké dans Oracle.

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; 

Lorsque j'exécute cette procédure ma première table se laissa tomber/Après que je reçois cette erreur msg

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. 

Ma première déclaration est CHAISE après Je suis confronté à un problème. Je le fais parce que je veux planifier un travail qui se déroulera tous les jours pour mettre à jour ces tableaux.

+0

Quelle est votre interprétation du message, 'ORA-01031: privilèges insuffisants'? Aussi, pourquoi ne pas simplement remplacer le contenu de la table au lieu de l'abandonner et de le créer? –

+0

@DanBracuk J'ai le previledges quand je le cours en septembre je peux courir et le créer. L'option de remplacement comment suggérer je fais cela – PriyalChaudhari

+0

Pour remplacer le contenu, utilisez deux requêtes. Le premier sera une suppression et le second sera un insert. –

Répondre

0

d'abord tout ce que je suggère d'utiliser q'{}' pour éviter la duplication '' par exemple:

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' }' ; 

Deuxième:

privilèges insuffisants

Il est assez clair message d'erreur. Vous devez vous assurer que vous avez privilèges à CREATE TABLE et lire des tables spécifiques.


Vous pouvez également envisager d'autres options:

  • TRUNCATE TABLE et INSERT INTO
  • Créer un affichage matérialisé et le rafraîchir sur une base quotidienne

EDIT:

J'ai les prévilèges. Lorsque je cours la création d'une table séparément, je lance et crée la table

Lorsque vous utilisez SQL dynamique à l'intérieur d'une procédure stockée, vous l'exécutez avec les droits de l'appelant/invocateur. Je soupçonne que c'est un compte rendu et a des privilèges limités.

+0

J'ai les prévilèges. Quand j'ai couru créer la table séparément je cours et crée la table – PriyalChaudhari

+0

ce qui devrait être le travail là-dessus toutes les suggestions ?? – PriyalChaudhari