Oracle
 sql >> база данни >  >> RDS >> Oracle

извикване на функция на Oracle, която прави вмъкване/актуализация от PHP?

Функция, която изпълнява DML, не може да бъде извикана в SELECT израз независимо от езика на повикването.

Ако искате да направите DML и да върнете стойност, би било много по-логично да създадете съхранена процедура с OUT параметър, а не използване на функция. Така че би било много по-логично да

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;

и след това извикайте тази съхранена процедура от PHP

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

Ако не искате да направите това, предполагам, че можете да направите нещо подобно (адаптирано от един от скриптовете на страница 164 от Подземен PHP и Ръководство за Oracle )

<?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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка при свързване с Oracle ODBC (използвайки стандартните ODBC драйвери на Oracle)

  2. Еквивалентна функция за DATEADD() в Oracle

  3. използвайки EXECUTE IMMEDIATE с множество еднакви аргументи за свързване

  4. Sql:Оптимизираща клауза BETWEEN

  5. Oracle- Лявото външно съединение на множество таблици не връща желаните нулеви стойности