Pb PL-SQL Oracle9i Script de delete dynamique

Fermé
Seb - 18 sept. 2009 à 18:35
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 - 19 sept. 2009 à 12:56
Bonjour,

Je souhaite(doit) faire un script PL-SQL permettant de faire un delete dynamique et intelligent sour Oracle 9i.
J'ai une table de parametrage qui me dit pour une table donnée quel est le champ qui porte la clé, et quel format a cette clé (plusieurs source dans les tables a delete)
DESC_TECH_REPRISE_DELETE
TABLE_NAME VARCHAR2(30 BYTE) NOT NULL,
COLUMN_NAME VARCHAR2(30 BYTE) NOT NULL,
NOM_FLUX VARCHAR2(3 BYTE) NOT NULL,
FORMAT_CLE VARCHAR2(10 BYTE) NOT NULL)

exemple:
toto|nom_toto|TO|TO%
toto|nom_toto|TA|TA%
mon but est donc de faire un delete sur la table toto :
delete from toto where nom_toto like 'TO%'

voici mon script, je ne comprends pas pourquoi il ne fonctionne pas:

DECLARE
--Declaration des variables
LC$NOM_FLUX DESC_TECH_REPRISE_DELETE.NOM_FLUX%TYPE:='&1';
LC$NOM_TABLE DESC_TECH_REPRISE_DELETE.TABLE_NAME%TYPE;
LC$NOM_COLON DESC_TECH_REPRISE_DELETE.COLUMN_NAME%TYPE;
LC$FORME_CLE DESC_TECH_REPRISE_DELETE.FORMAT_CLE%TYPE;
LC$CHAINE VARCHAR2(1500);
--Curseur de recuperation de la table de parametrage
CURSOR C_TABLE_DELETE IS
SELECT
DEL.TABLE_NAME,
DEL.COLUMN_NAME,
DEL.FORMAT_CLE
FROM
DESC_TECH_REPRISE_DELETE DEL
WHERE
DEL.NOM_FLUX='LC$NOM_FLUX';
BEGIN
--Debut boucle table parametrage
FOR DELETE_LIST IN C_TABLE_DELETE
LOOP
--Affectation des valeurs de la table de parametrage aux varaibles locales
LC$NOM_TABLE:=DELETE_LIST.TABLE_NAME;
LC$NOM_COLON:=DELETE_LIST.COLUMN_NAME;
LC$FORME_CLE:=DELETE_LIST.FORMAT_CLE;
--Appel du delete par la boucle
LC$CHAINE:='DELETE FROM :1 where :2 LIKE '||''''||':3'||'''';
EXECUTE IMMEDIATE LC$CHAINE USING LC$NOM_TABLE,LC$NOM_COLON,LC$FORME_CLE;
COMMIT;
END LOOP; --Fin de la boucle
END;


Si vous avez une idée je suis preneur
A voir également:

1 réponse

chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
19 sept. 2009 à 12:56
Salut,
tu as essayer cela:
LC$CHAINE:='DELETE FROM '||LC$NOM_TABLE||' where '||LC$NOM_COLON||' LIKE '||''''||'LC$FORME_CLE'||'''';
EXECUTE IMMEDIATE LC$CHAINE;
COMMIT;
(verifie la syntaxe de LC$CHAINE avec les ||, "" et ')
@+
0