Oracle
 sql >> Database >  >> RDS >> Oracle

chiamare una funzione Oracle che esegue un inserimento/aggiornamento da PHP?

Una funzione che esegue DML non può essere chiamata in un SELECT dichiarazione indipendentemente dalla lingua di chiamata.

Se vuoi fare DML e restituire un valore, avrebbe molto più senso creare una procedura memorizzata con un OUT parametro anziché utilizzare una funzione. Quindi avrebbe molto più senso

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;

e quindi chiama la procedura memorizzata da PHP

$sql = 'BEGIN proc_name_return( :p_1, :p_2, :p_ret ); END;';

Se non vuoi farlo, suppongo che potresti fare anche qualcosa del genere (adattato da uno degli script a pagina 164 del Manuale PHP e Oracle sotterraneo )

<?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;
?>