Page 1 sur 1

Exécuter un script PL/SQL à partir d'une page PHP

Posté : 13 mars 2013, 19:21
par Nanard
Bonjour,

Je cherche le moyen d'appeler un fichier contenant une procédure PL/SQL et de l'éxécuter à partir de PHP.
Je précise que je travaille sur une base ORACLE en utilisant le connecteur OCI.

Quelque chose du style :
$query = "./file.sql";
$parse = ociparse($query);
ociexecute($parse);
Comment faire ?

Merci par avance.

Re: Exécuter un script PL/SQL à partir d'une page PHP

Posté : 14 mars 2013, 00:25
par moogli
salut,


Tu ne peux pas exécuter un fichier comme ça (c'est pas de l’exécutable ;) ).

c'est relativement simple, commence par récupérer le contenue du fichier fil_get_contents

ensuite une simple requête classique comme tu le ferais dans pl/dev ou sql developer (donc avec le begin / declare).

si c'est la déclaration de la procédure, c'est la même chose :)


je t'invite à regarder du coté l'extension PDO plutot que l'extension oci.
si tu reste sur oci utilise au moins les noms de fonctions à jour les tiens sont dépréciés (par exemple oci_parse plutôt que ociparse). Voir la doc php pour plus d'info ;)

@+

Re: Exécuter un script PL/SQL à partir d'une page PHP

Posté : 14 mars 2013, 17:34
par Nanard
Bon, j'ai vu, j'ai lu mais j'ai pas vaincu ! Alors j'ai utilisé une méthode de salaud mais... qui fonctionne.
J'ai déclaré une variable $query dans laquelle j'ai inséré chaque ligne avec des concaténations.

Oui, je sais, pas la peine d'en rajouter, j'ai assez honte comme ça...
$query = "Declare ".
"total2 number NOT NULL DEFAULT 0;".
"NB number NOT NULL DEFAULT 0;".
"LEVEL number NOT NULL DEFAULT 0;".
"CURSOR F_PACK IS SELECT * FROM SAP_PACKAGES WHERE PACKAGE_TYPE = 'HF' ORDER BY PACKAGE_ID ASC ;".
"Begin ".
"SELECT MAX(PACKAGE_LEVEL) INTO LEVEL FROM SAP_PACKAGES ;".
"loop ".
	"For F in F_PACK loop ".
		"SELECT COUNT(*) INTO NB FROM SAP_PACKAGES WHERE PACKAGE_PARENT_ID = F.PACKAGE_ID ;".
		"If NB = 0 then ".
			"DELETE FROM SAP_PACKAGES WHERE PACKAGE_ID = F.PACKAGE_ID ;".
			"total2 := total2 +1 ;".
		"end if ;".
	"end loop ;".
	"LEVEL := LEVEL - 1;".
	"exit when LEVEL = 0 ;".
"end loop ;".
"DBMS_OUTPUT.PUT_LINE(total2 || ' suppression(s) ');".
"end ;";

Re: Exécuter un script PL/SQL à partir d'une page PHP

Posté : 18 mars 2013, 21:52
par moogli
heu c'est pourtant simple tu avait tous ce qu'il te fallait, sauf le file_get_contents :)

<?php
$query = file_get_contents('./file.sql');
$parse = ociparse($query);
ociexecute($parse);
il faut bien sur que le fichier ai les bons droits pour que php puisse l'utiliser ;)


@+

Re: Exécuter un script PL/SQL à partir d'une page PHP

Posté : 19 mars 2013, 18:02
par zeus
Modération :
Afin d'obtenir plus de réponses, le sujet a été déplacé dans un forum plus approprié.