sql >> Database >  >> RDS >> Oracle

een Oracle-functie aanroepen die een insert/update van PHP doet?

Een functie die DML doet, kan niet worden aangeroepen in een SELECT verklaring ongeacht de taal van de oproep.

Als je DML wilt doen en een waarde wilt retourneren, is het veel logischer om een ​​opgeslagen procedure te maken met een OUT parameter in plaats van een functie te gebruiken. Het zou dus veel logischer zijn om

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;

en dan roep die opgeslagen procedure op vanuit PHP

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

Als je dat niet wilt, denk ik dat je ook zoiets zou kunnen doen (aangepast van een van de scripts op pagina 164 van de Ondergrondse PHP- en Oracle-handleiding )

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



  1. Geen tabellen gevonden in database

  2. Wat is er mis met deze opgeslagen procedure?

  3. Voeg een database toe in SQLite

  4. Laravel PDOException-fout in Connector.php-regel 55