Функция, выполняющая DML, не может быть вызвана в операторе SELECT
независимо от языка вызова.
Если вы хотите выполнить DML и вернуть значение, было бы гораздо разумнее создать хранимую процедуру с параметром OUT
, а не использовать функцию. Так что было бы гораздо больше смысла для
CREATE OR REPLACE PROCEDURE proc_name( 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;
и затем вызов этой хранимой процедуры из PHP
$sql = 'BEGIN proc_return( :p_1, :p_2, :p_ret ); END;';
Если вы не хотите этого делать, я думаю, что вы могли бы сделать что-то подобное (адаптировано из одного из сценариев на стр. 164 Underground PHP и Oracle Manual )
<?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;
?>