sql >> Database >  >> RDS >> Oracle

Opgeslagen Oracle-procedure aanroepen vanuit PHP

Om met een cursor in PHP te werken zijn drie extra stappen vereist, in vergelijking met het rechtstreeks benaderen van rijen vanuit een SELECT verklaring.

  • De eerste stap is het voorbereiden van een cursorbron in PHP met behulp van de oci_new_cursor() functie, die u vervolgens gebruikt om aan de juiste parameter te binden.
  • De tweede stap is het toevoegen van een parameter op oci_bind_by_name() functie
  • De derde stap, nadat u de gebruikelijke SQL-instructie hebt uitgevoerd, is het aanroepen van oci_execute() op de cursorbron.

De code:

//Connection does not change
$db = "(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = JXYX.com)(PORT = 1521)))(CONNECT_DATA=(SID=DHSJKS)))";
$conn = ocilogon("XXXXXX","XXXXXXXX",$db);          

//Request does not change
$sql = 'BEGIN SP_GET_MY_DATA(:POP, :SEG, :DUR, :VIEW, :PAGE, :OUTPUT_CUR); END;';            

//Statement does not change
$stmt = oci_parse($conn,$sql);                     
oci_bind_by_name($stmt,':POP',$pop);           
oci_bind_by_name($stmt,':SEG',$seg);           
oci_bind_by_name($stmt,':DUR',$dur);           
oci_bind_by_name($stmt,':VIEW',$view);           
oci_bind_by_name($stmt,':PAGE',$page);    

//But BEFORE statement, Create your cursor
$cursor = oci_new_cursor($conn)

// On your code add the latest parameter to bind the cursor resource to the Oracle argument
oci_bind_by_name($stmt,":OUTPUT_CUR", $cursor,-1,OCI_B_CURSOR);

// Execute the statement as in your first try
oci_execute($stmt);

// and now, execute the cursor
oci_execute($cursor);

// Use OCIFetchinto in the same way as you would with SELECT
while ($data = oci_fetch_assoc($cursor, OCI_RETURN_LOBS )) {
    print_r($data);
}

Ik spreek Oracle (en Engels) niet erg vloeiend, dus lees deze tutorial . Er is een interessant voorbeeld, kijk naar de Opgeslagen procedures en referentiecursors hoofdstuk!

Ik hoop dat het helpt!




  1. Yii2 stapsgewijze handleiding bij inloggen vanuit de tabel in MySQL

  2. Foreign key in de eerste tabel

  3. Alleen tijd bijwerken vanuit mijn Datetime-veld in sql

  4. Een tabel bijwerken en bijgewerkte rijen weergeven met een enkele SQL-opdracht