Eine Funktion, die DML ausführt, kann nicht in einem SELECT
aufgerufen werden Anweisung unabhängig von der aufrufenden Sprache.
Wenn Sie DML ausführen und einen Wert zurückgeben möchten, wäre es viel sinnvoller, eine gespeicherte Prozedur mit einem OUT
zu erstellen Parameter, anstatt eine Funktion zu verwenden. Es wäre also viel sinnvoller,
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;
und dann diese gespeicherte Prozedur von PHP aufrufen
$sql = 'BEGIN proc_name_return( :p_1, :p_2, :p_ret ); END;';
Wenn Sie das nicht tun möchten, könnten Sie meiner Meinung nach auch so etwas tun (adaptiert von einem der Skripte auf Seite 164 des Underground PHP and 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;
?>