Một hàm sử dụng DML không thể được gọi trong SELECT
tuyên bố bất kể ngôn ngữ gọi là gì.
Nếu bạn muốn thực hiện DML và trả về một giá trị, sẽ có ý nghĩa hơn nhiều khi tạo một thủ tục được lưu trữ với OUT
tham số thay vì sử dụng một hàm. Vì vậy, nó sẽ có ý nghĩa hơn nhiều khi
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;
và sau đó gọi thủ tục được lưu trữ đó từ PHP
$sql = 'BEGIN proc_name_return( :p_1, :p_2, :p_ret ); END;';
Nếu bạn không muốn làm điều đó, tôi đoán là bạn cũng có thể làm điều gì đó như thế này (phỏng theo một trong những đoạn mã trên trang 164 của Hướng dẫn sử dụng nền tảng PHP và 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;
?>