Ben bir anonim PL / SQL blok PHP değerleri döndürebilir?

1 Cevap php

Ben kod anonim Oracle PL / SQL bloklarını çalıştırmak için PHP ve OCI8 kullanıyorum. Bana bir değişken bağlamak ve bloğun tamamlanmasıyla çıktısı almak için herhangi bir yolu var mı, sadece ben gibi benzer bir şekilde saklanan prosedürleri çağrı alıyorsunuz?

$SQL = "declare
something varchar2 := 'I want this returned';
begin
  --How can I return the value of 'something' into a bound PHP variable?
end;";

1 Cevap

Sen adı ve veri türü bildirimi arasında anahtar OUT kullanarak bir out parametresi tanımlayın. IE:

CREATE OR REPLACE PROCEDURE blah (OUT_PARAM_EXAMPLE OUT VARCHAR2) IS ...

Eğer belirtilmemişse, IN varsayılan. Eğer içinde ve dışında hem de bir parametre kullanmak istiyorsanız kullanın:

CREATE OR REPLACE PROCEDURE blah (INOUT_PARAM_EXAMPLE IN OUT VARCHAR2) IS ...

Aşağıdaki örnek IN ve OUT parametreleri ile bir yordam oluşturur. Yordam, daha sonra yürütülen ve sonuçları yazdırılır.

<?php
   // Connect to database...
   $c = oci_connect("hr", "hr_password", "localhost/XE");
   if (!$c) {
      echo "Unable to connect: " . var_dump( oci_error() );
      die();
   }

   // Create database procedure...
   $s = oci_parse($c, "create procedure proc1(p1 IN number, p2 OUT number) as " .
                     "begin" .
                     "  p2 := p1 + 10;" .
                     "end;");
   oci_execute($s, OCI_DEFAULT);

   // Call database procedure...
   $in_var = 10;
   $s = oci_parse($c, "begin proc1(:bind1, :bind2); end;");
   oci_bind_by_name($s, ":bind1", $in_var);
   oci_bind_by_name($s, ":bind2", $out_var, 32); // 32 is the return length
   oci_execute($s, OCI_DEFAULT);
   echo "Procedure returned value: " . $out_var;

   // Logoff from Oracle...
   oci_free_statement($s);
   oci_close($c);
 ?>

Referans: