PHP a funkce OCI (Oracle)
Ahoj, mám takový problém a nemůžu to nikde vyčíst...
potřebuji do nějaké proměnné co mám v PHP vrátit výsledek funkce co mám v databázi Oracle (neřešte prosím proč mám oracle - přišel jsme už k hotovému)
takže mám v oraclu sql funkci, která něco provádí a pak vratí nějakou proměnnou typu number a já bych potřeboval to číslo které vrací ta funkce uložit do nějaké proměnné v PHP abych s ní pak nadále mohl pracovat.
Pro připojení k oracle db je použito OCI (opět nemůžu použít něco jiného).
Děkuju za rady
Re: PHP a funkce OCI (Oracle)
Priklad 11:
Example #11 Binding parameters for a PL/SQL stored procedure<?php
// Before running the PHP program, create a stored procedure in
// SQL*Plus or SQL Developer:
//
// CREATE OR REPLACE PROCEDURE myproc(p1 IN NUMBER, p2 OUT NUMBER) AS
// BEGIN
// p2 := p1 * 2;
// END;
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
$p1 = 8;
$stid = oci_parse($conn, 'begin myproc(:p1, :p2); end;');
oci_bind_by_name($stid, ':p1', $p1);
// The second procedure parameter is an OUT bind. The default type
// will be a string type so binding a length 40 means that at most 40
// digits will be returned.
oci_bind_by_name($stid, ':p2', $p2, 40);
oci_execute($stid);
print "$p2\n"; // prints 16
oci_free_statement($stid);
oci_close($conn);
?>
http://php.net/manual/en/function.oci-bind-by-name.php
Out Parameter je to hledane klicove slovo :)
Re: PHP a funkce OCI (Oracle)
Asi dělám něco blbě, ale hází to chyby...
mám nějakou funkci moje_funkce(id number, rezervace number)
declarace
pocet number
vykoná se tělo funkce
pocet := nejaky vypocty
return pocet;
end;
pak mam v php
$Overeni = "select moje_funkce($id,$rezervace) as pocet from skoleni";
$stid = oci_parse($conn, $Overeni);
//pak by měl být ten oci_bind?
oci_bind_by_name($stid, ':pocet', $pocet, 40); //tady se to kousne
oci_execute($stid);
Re: PHP a funkce OCI (Oracle)
Tak jsem to nakonec udělal pomocí oci_fetch a cyklusem a funguje to.