Oracle
 sql >> Base de données >  >> RDS >> Oracle

appeler une fonction Oracle qui effectue une insertion/mise à jour à partir de PHP ?

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;
?>