sql >> Base de Datos >  >> RDS >> Oracle

llamar a una función de Oracle que hace una inserción/actualización desde PHP?

Una función que hace DML no se puede llamar en un SELECT declaración independientemente del idioma de llamada.

Si desea hacer DML y devolver un valor, tendría mucho más sentido crear un procedimiento almacenado con OUT parámetro en lugar de utilizar una función. Así que tendría mucho más sentido

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;

y luego llame a ese procedimiento almacenado desde PHP

$sql = 'BEGIN proc_name_return( :p_1, :p_2, :p_ret ); END;';

Si no quieres hacer eso, supongo que también podrías hacer algo como esto (adaptado de uno de los scripts en la página 164 de Manual subterráneo de PHP y 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;
?>