Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Rufen Sie eine Oracle-Funktion auf, die eine Einfügung/Aktualisierung von PHP aus durchführt?

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