Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

chamar uma função Oracle que faça uma inserção/atualização do PHP?


Uma função que faz DML não pode ser chamada em um SELECT instrução independentemente da linguagem de chamada.

Se você quiser fazer DML e retornar um valor, faria muito mais sentido criar um procedimento armazenado com um OUT parâmetro em vez de usar uma função. Então faria muito mais sentido
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 então chamar esse procedimento armazenado do PHP
$sql = 'BEGIN proc_name_return( :p_1, :p_2, :p_ret ); END;';

Se você não quiser fazer isso, meu palpite é que você poderia fazer algo assim também (adaptado de um dos scripts na página 164 do Manual PHP e Oracle Subterrâneo )
<?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;
?>