samedi 17 juillet 2010

Utilisation de 'EXECUTE IMMEDIATE'.

Il est possible qu'on paramètre la création d'une table dans un bloc PL/SQL en utilisant la commande SQL Dynamique EXECUTE IMMEDIATE.

CREATE OR REPLACE PROCEDURE TESTSTRING (String IN Varchar2) AS
Begin
EXECUTE IMMEDIATE String;
end;

On va compiler la procédure et l'exécuter comme suit:

EXEC TESTSTRING(' CREATE TABLE TEST(ID NUMBER, NOM VARCHAR2(30))');

On peut utiliser de la même façon pour supprimer une ou plusieurs lignes. Voici le code:

create or replace procedure EFFACER_ENREG
(Table_Nom in VARCHAR2,
Condition IN VARCHAR2 default NULL)
AS
Clause_Where VARCHAR2(100) := ' WHERE ' || Condition;
Begin
-- Si aucune condition donnée au paramètre, il renvoie la valeur NULL
-- Et il va supprimer tous les enregistrements de la table

IF Condition is NULL then Clause_Where := NULL;
END IF;
EXECUTE IMMEDIATE ' DELETE FROM ' || Table_Nom || Clause_Where;
end;

Pour l'exécuter sans paramètre de condition:
EXEC EFFACER_ENREG('TEST');

Avec un paramètre (une fois que la table soit remplie avec des INSERT INTO):
EXEC EFFACER_ENREG('TEST','ID=1');

Abed

Aucun commentaire:

Enregistrer un commentaire