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

kalder en Oracle-funktion, der laver en indsættelse/opdatering fra PHP?

En funktion, der udfører DML, kan ikke kaldes i en SELECT erklæring uanset opkaldssproget.

Hvis du vil lave DML og returnere en værdi, ville det give meget mere mening at oprette en lagret procedure med en OUT parameter i stedet for at bruge en funktion. Så det ville give meget mere mening at

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;

og derefter kald den lagrede procedure fra PHP

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

Hvis du ikke vil gøre det, er mit gæt, at du også kunne gøre sådan noget (tilpasset fra et af scripts på side 164 i Underground PHP og 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;
?>



  1. Mange-til-mange forhold mellem to tabeller i to forskellige databaser

  2. Hvordan kan jeg stoppe et Postgres-script, når det støder på en fejl?

  3. "vis opret tabel" ækvivalent i oracle sql

  4. Implementering og administration af PostgreSQL 11:Nyt i ClusterControl 1.7.1