En funktion, der udfører DML, kan ikke kaldes i en SELECT
erklæring uanset opkaldssproget.
Hvis du vil lave DML og returnere en værdi, ville det give meget mere mening at oprette en lagret procedure med en OUT
parameter i stedet for at bruge en funktion. Så det ville give meget mere mening at
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;
og derefter kald den lagrede procedure fra PHP
$sql = 'BEGIN proc_name_return( :p_1, :p_2, :p_ret ); END;';
Hvis du ikke vil gøre det, er mit gæt, at du også kunne gøre sådan noget (tilpasset fra et af scripts på side 164 i Underground PHP og 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;
?>