Bonjour à tous,
Je viens vous demander de l'aide en raison d'un problème que je rencontre en SQL.
Je dois créer une procédure qui permet de lire dans une table de paramétrage et qui appellera différentes fonctions par la suite. Actuellement j'ai créé le Package dans lequel la procédure est stockée et je tente d'exécuter la procédure avant de rajouter les fonctions à l'intérieur.
Le but étant à termes de :
1) Je reçois un nom de partition
2) Je le donne en paramètre à une procédure pour une table de paramétrage elle aussi en paramètre.
3) J'appelle une fonction au sein de cette procédure qui récupère ses paramètres depuis la table de paramétrage.
4) Le tout étant parallélisable par grâce à la procédure afin de pouvoir traiter plusieurs partitions simultanément.
Actuellement mon code se constitue de cette manière :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 create or replace PACKAGE BODY Mon_PACKAGE AS PROCEDURE Lecture_Table_Param ( P_E_C_Table_Param VARCHAR2, P_E_C_Nom_Partition VARCHAR2 ) AS Requete VARCHAR2(2000); Schema VARCHAR2(50); -- Nom de la colonne contenant le nom du schema a analyser Appli VARCHAR2(50); -- Nom de la colonne contenant le nom de l appli a analyser Table VARCHAR2(50); -- Nom de la colonne contenant le nom de la table a analyser Partition VARCHAR2(50); -- Nom de la colonne contenant le nom de la partition a analyser Champ VARCHAR2(50); -- Nom de la colonne contenant le nom de la colonne a analyser ID VARCHAR2(50); -- ID du couple Partion/Colonne C_cursor SYS_REFCURSOR ; Curseur VARCHAR2(1000); BEGIN Curseur := 'SELECT Champ_ID,Champ_Appli, Champ_Table, Champ_Partition, Champ_Champs FROM '||P_E_C_Table_Param||' WHERE Champ_Partition= '''||P_E_C_Part_table||''')'; OPEN C_cursor for Curseur ; LOOP FETCH C_cursor INTO ID, Appli, Table, Partition, Champ; EXIT WHEN C_cursor%NOTFOUND; Requete := 'dbms_output.put_line(Champ_Appli: '|| V_C_Appli||' Champ_Table: '|| V_C_Table||' Champ_Partition: '|| V_C_Partition||' Champ_Champs: '|| V_C_Champ||' Champ_ID: '|| ID||')' ; EXECUTE IMMEDIATE Requete; END LOOP; CLOSE C_cursor; EXCEPTION WHEN NO_DATE_FOUND THEN RAISE; END; END Mon_PACKAGE ;
ça c'est pour la procédure stockée dans le package.
Maintenant je tente de faire un script pour utiliser cette procédure en faisant un test simple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 SET SERVEROUTPUT ON; SET SERVEROUT ON; DBMS_OUTPUT.ENABLE ( taille_tampon IN NUMBER (20000)); DECLARE P_E_C_Table_Param VARCHAR2(100); P_E_C_Part_table VARCHAR2(100); Requete VARCHAR2(2000); Schema VARCHAR2(50); -- Nom de la colonne contenant le nom du schema a analyser Appli VARCHAR2(50); -- Nom de la colonne contenant le nom de l appli a analyser Table VARCHAR2(50); -- Nom de la colonne contenant le nom de la table a analyser Partition VARCHAR2(50); -- Nom de la colonne contenant le nom de la partition a analyser Champ VARCHAR2(50); -- Nom de la colonne contenant le nom de la colonne a analyser ID VARCHAR2(50); -- ID du couple Partion/Colonne C_cursor SYS_REFCURSOR ; Curseur VARCHAR2(1000); BEGIN USER_ORACLE.Mon_PACKAGE.Lecture_Table_Param ('USER_ORACLE.Nom_Table','Nom_Partition'); dbms_output.put_line('V_C_Schema: '|| V_C_Schema); dbms_output.put_line('V_C_Appli: '|| V_C_Appli); dbms_output.put_line('V_C_Table: '|| V_C_Table); dbms_output.put_line('V_C_Partition: '|| V_C_Partition); dbms_output.put_line('V_C_Champ: '|| V_C_Champ); dbms_output.put_line('V_C_ID: '|| V_C_ID); END;
Au niveau de ma base de données, j'ai volontairement mis pour tester une seule ligne dans USER_ORACLE.Nom_Table mais la commande SQL ne fonctionne pas...
J'obtiens en retour :
Je n'arrive pas à trouver la solution ni d'où vient l'erreur malgré de nombreuses recherches...Rapport d'erreur -
ORA-00933: la commande SQL ne se termine pas correctement
ORA-06512: à "USER_ORACLE.Mon_PACKAGE", ligne 27
ORA-06512: à ligne 15
00933. 00000 - "SQL command not properly ended"
*Cause:
*Action:
Partager