sql >> Databasteknik >  >> RDS >> Oracle

Ring Oracles lagrade procedur från PHP

För att arbeta med en markör i PHP krävs ytterligare tre steg, jämfört med att komma åt rader direkt från en SELECT uttalande.

  • Det första steget är att förbereda en markörresurs i PHP med oci_new_cursor() funktion, som du sedan använder för att binda till lämplig parameter.
  • Det andra steget är att lägga till en parameter på oci_bind_by_name() funktion
  • Det tredje steget, efter att du har kört den vanliga SQL-satsen, är att anropa oci_execute() på markörresursen.

Koden:

//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);
}

Jag är inte så flytande med Oracle (och engelska) så du borde läsa denna handledning . Det finns ett intressant exempel, titta på Lagrade procedurer och referensmarkörer kapitel!

Hoppas det hjälper!




  1. Behöver en praktisk lösning för att skapa mönsterdatabas (5-5-5) för 15-pussel

  2. MySql.Data.MySqlClient.Replication.ReplicationManager kastar en System.TypeInitializationException

  3. Postgres Vänster Gå med där skick

  4. Uppdatera utan where-klausul