Une fonction qui fait du DML ne peut pas être appelée dans un SELECT
quelle que soit la langue d'appel.
Si vous voulez faire du DML et retourner une valeur, il serait beaucoup plus logique de créer une procédure stockée avec un OUT
paramètre plutôt que d'utiliser une fonction. Il serait donc beaucoup plus logique de
CREATE OR REPLACE PROCEDURE proc_name_return( p_1 IN NUMBER,
p_2 IN NUMBER,
p_ret OUT VARCHAR2 )
AS
BEGIN
p_ret := pkg_tools.replace.site( p_1, p_2 );
END;
puis appelez cette procédure stockée depuis PHP
$sql = 'BEGIN proc_name_return( :p_1, :p_2, :p_ret ); END;';
Si vous ne voulez pas faire cela, je suppose que vous pouvez également faire quelque chose comme ça (adapté de l'un des scripts de la page 164 du Manuel PHP souterrain et Oracle )
<?php
$c = oci_connect('hr', 'hrpwd', 'localhost/XE');
$s = oci_parse($c, "begin :ret :=pkg_tools.replace_site(1121,3343); end;");
oci_bind_by_name($s, ':ret', $r, 200);
oci_execute($s);
echo "Result is: ".$r;
?>