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

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

За да работите с курсор в PHP, са необходими три допълнителни стъпки в сравнение с достъпа до редове директно от SELECT изявление.

  • Първата стъпка е подготовката на ресурс за курсор в PHP с помощта на oci_new_cursor() функция, която след това използвате за свързване към съответния параметър.
  • Втората стъпка е да добавите параметър към oci_bind_by_name() функция
  • Третата стъпка, след като сте изпълнили обичайния SQL израз, е извикването на oci_execute() върху ресурса на курсора.

Кодът:

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

Не владея много добре Oracle (и английски), така че трябва да прочетете този урок . Има интересен пример, вижте Съхранените процедури и референтните курсори глава!

Надявам се да помогне!




  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 sql

  2. Oracle Natural Joins и Count (1)

  3. SQLException:Нарушение на протокола в Oracle

  4. Oracle Създаване на таблица AS и коментари за таблици и коментари за колони

  5. проблем при създаването на заглавки с помощта на spool в sqlplus