Fungsi yang melakukan DML tidak dapat dipanggil dalam SELECT
pernyataan terlepas dari bahasa panggilan.
Jika Anda ingin melakukan DML dan mengembalikan nilai, akan lebih masuk akal untuk membuat prosedur tersimpan dengan OUT
parameter daripada menggunakan fungsi. Jadi akan lebih masuk akal untuk
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;
dan kemudian panggil prosedur tersimpan itu dari PHP
$sql = 'BEGIN proc_name_return( :p_1, :p_2, :p_ret ); END;';
Jika Anda tidak ingin melakukan itu, tebakan saya adalah Anda juga dapat melakukan hal seperti ini (diadaptasi dari salah satu skrip di halaman 164 dari Manual PHP dan Oracle Bawah Tanah )
<?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;
?>