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