Bonjour,

Je n'arrive pas à trouver comment faire une regex qui trouve les point-virgules pour séparer des requêtes SQL, sachant qu'il peut y avoir des fonctions (qui contiennent donc des points virgules dans leur corps);

Par exemple, avec un preg_replace(), je souhaite convertir :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DROP FUNCTION IF EXISTS maFonction (INTEGER,INTEGER,TIMESTAMP);
CREATE FUNCTION maFonction (INTEGER,INTEGER,TIMESTAMP)
	RETURNS INTEGER
AS $$
DECLARE
	id INTEGER;
BEGIN
	blabla;
	IF id IS NULL THEN
		blabla;
	END IF;
	RETURN id;
END;
$$ LANGUAGE PLPGSQL;

en :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DROP FUNCTION IF EXISTS maFonction (INTEGER,INTEGER,TIMESTAMP);###
CREATE FUNCTION maFonction (INTEGER,INTEGER,TIMESTAMP)
	RETURNS INTEGER
AS $$
DECLARE
	id INTEGER;
BEGIN
	blabla;
	IF id IS NULL THEN
		blabla;
	END IF;
	RETURN id;
END;
$$ LANGUAGE PLPGSQL;###

La difficulté est donc de ne pas tenir compte des point-virgules entre "CREATE FUNCTION" ET "PLPGSQL" par exemple.

Après, il me suffit de faire un explode sur '###' pour mettre chaque requête séparément dans un tableau.
(EDIT : ou preg_split(), et rajout du point-virgule en fin de chaque chaine)

J'ai regardé du côté des assertions avant/arrières, mais je n'ai pas réussi à mettre en œuvre quelque chose qui fonctionne...

Merci d'avance pour l'aide apportée.