Bonjour à tous,

j'ai une procédure qui s'exécute chaque fin de mois de la manière suivant :

depuis sysdate de chaque fin de mois j'obtient le num de jour et le mois et l'année
exemple :

pour 31/10/2018 je crée la table TABLE_31_10_2018
avec

mon code est à peu près le suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
SELECT count(*)
    INTO nb
    FROM dba_objects
   WHERE object_type = 'TABLE'
    and owner = 'SYS'
     and object_name = table_aaa; 
 
// avec table_aaa := CONCAT(CONCAT(CONCAT('TABLE_', mois), '_'), year);
si nb =0

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
req := 'GRANT INSERT ON TABLE_'||jour||'_'||mois||'_'||year||' TO PUBLIC ';
EXECUTE IMMEDIATE (req)


Code : Sélectionner tout - Visualiser dans une fenêtre à part
CREATE TABLE TABLE_'||jour||'_'||mois||'_'||year|| AS SELECT ... FROM TABLE_SOURCE WHERE ....

alors else


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
req := 'GRANT ALL PRIVILEGES ON TABLE_'||jour||'_'||mois||'_'||year||' TO PUBLIC ';
EXECUTE IMMEDIATE (req)
j'ai le code erreur suivant :

ORA-01929: pas de privilège pour GRANT

quand je change req par :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
req := 'GRANT INSERT ON TABLE_'||jour||'_'||mois||'_'||year||' TO PUBLIC ';
EXECUTE IMMEDIATE (req)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
req := 'GRANT UPDATE ON TABLE_'||jour||'_'||mois||'_'||year||' TO PUBLIC ';
EXECUTE IMMEDIATE (req)
j'ai le code erreur suivant :

ORA-01031: privilèges insuffisants

je vous signale que la partie suivante est :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
INSERT INTO TABLE_'||jour||'_'||mois||'_'||year|| SELECT ... FROM TABLE_SOURCE WHERE ....
et

Code : Sélectionner tout - Visualiser dans une fenêtre à part
UPDATE TABLE_'||jour||'_'||mois||'_'||year|| SET VAL = .... , VAL2=.... WHERE ....