Примеры 
 
  Эти примеры выполняются под пользователем HR , который
  является образцом из "Human Resources" схемы, поставляемой
  вместе с базой данных Oracle. Возможно потребуется разблокировать этот аккаунт
  и переустановить для него пароль, чтобы использовать его.
 
 
  Примеры подключаются к базе данных XE  на вашем компьютере.
  Вы можете заменить строки с подключением для использования своих баз данных.
 
 
  Пример #1 Простой запрос 
  
   Данный пример показывает запрос и результат. Выражения в OCI8 используют
   последовательность из шагов подготовка-выполнение-выборка.
  
 
  
<?php $conn  =  oci_connect ( 'hr' ,  'welcome' ,  'localhost/XE' ); if (! $conn ) {      $e  =  oci_error ();      trigger_error ( htmlentities ( $e [ 'message' ],  ENT_QUOTES ),  E_USER_ERROR ); } // Подготовка выражения $stid  =  oci_parse ( $conn ,  'SELECT * FROM departments' ); if (! $stid ) {      $e  =  oci_error ( $conn );      trigger_error ( htmlentities ( $e [ 'message' ],  ENT_QUOTES ),  E_USER_ERROR ); } // Выполним логику запроса $r  =  oci_execute ( $stid ); if (! $r ) {      $e  =  oci_error ( $stid );      trigger_error ( htmlentities ( $e [ 'message' ],  ENT_QUOTES ),  E_USER_ERROR ); } // Получим результат запроса print  "<table border='1'>\n" ; while ( $row  =  oci_fetch_array ( $stid ,  OCI_ASSOC + OCI_RETURN_NULLS )) {     print  "<tr>\n" ;     foreach ( $row  as  $item ) {         print  "    <td>"  . ( $item  !==  null  ?  htmlentities ( $item ,  ENT_QUOTES ) :  "" ) .  "</td>\n" ;     }     print  "</tr>\n" ; } print  "</table>\n" ; oci_free_statement ( $stid ); oci_close ( $conn ); ?> 
 
   
  
 
  Пример #2 Вставка с использованием привязанных переменных 
  
   Привязывание переменных повышают производительность за счет повторного
   использования контекста запроса и кеширования. Также они повышают
   безопасность блокируя некоторые типы SQL-инъекций.
  
 
  
<?php // Создайте таблицу перед выполнением: //   CREATE TABLE MYTABLE (mid NUMBER, myd VARCHAR2(20)); $conn  =  oci_connect ( 'hr' ,  'welcome' ,  'localhost/XE' ); if (! $conn ) {      $e  =  oci_error ();      trigger_error ( htmlentities ( $e [ 'message' ],  ENT_QUOTES ),  E_USER_ERROR ); } $stid  =  oci_parse ( $conn ,  'INSERT INTO MYTABLE (mid, myd) VALUES(:myid, :mydata)' ); $id  =  60 ; $data  =  'Some data' ; oci_bind_by_name ( $stid ,  ':myid' ,  $id ); oci_bind_by_name ( $stid ,  ':mydata' ,  $data ); $r  =  oci_execute ( $stid );   // выполнение и фиксация if ( $r ) {     print  "Была вставлена одна строка" ; } oci_free_statement ( $stid ); oci_close ( $conn ); ?> 
 
   
  
 
  Пример #3 Вставка данных в поле типа CLOB 
  
   Для больших данных используйте длинные двоичные объекты (BLOB) или
   длинные символьные объекты (CLOB). Данный пример использует тип данных CLOB.
  
 
  
<?php // Создайте таблицу перед выполнением: //     CREATE TABLE MYTABLE (mykey NUMBER, myclob CLOB); $conn  =  oci_connect ( 'hr' ,  'welcome' ,  'localhost/XE' ); if (! $conn ) {      $e  =  oci_error ();      trigger_error ( htmlentities ( $e [ 'message' ],  ENT_QUOTES ),  E_USER_ERROR ); } $mykey  =  12343 ;   // произвольный ключ для данного примера; $sql  =  "INSERT INTO mytable (mykey, myclob)         VALUES (:mykey, EMPTY_CLOB())         RETURNING myclob INTO :myclob" ; $stid  =  oci_parse ( $conn ,  $sql ); $clob  =  oci_new_descriptor ( $conn ,  OCI_D_LOB ); oci_bind_by_name ( $stid ,  ":mykey" ,  $mykey ,  5 ); oci_bind_by_name ( $stid ,  ":myclob" ,  $clob , - 1 ,  OCI_B_CLOB ); oci_execute ( $stid ,  OCI_NO_AUTO_COMMIT );  // используйте OCI_DEFAULT для PHP <= 5.3.1 $clob -> save ( "A very long string" ); oci_commit ( $conn ); // Получение CLOB данных $query  =  'SELECT myclob FROM mytable WHERE mykey = :mykey' ; $stid  =  oci_parse  ( $conn ,  $query ); oci_bind_by_name ( $stid ,  ":mykey" ,  $mykey ,  5 ); oci_execute ( $stid ); print  '<table border="1">' ; while ( $row  =  oci_fetch_array ( $stid ,  OCI_ASSOC )) {      $result  =  $row [ 'MYCLOB' ]-> load ();     print  '<tr><td>' . $result . '</td></tr>' ; } print  '</table>' ; ?> 
 
   
  
 
  Пример #4 Использование PL/SQL хранимых процедур 
  
   Вы должны привязывать переменную для каждого возвращаемого значения 
   и опционально для каждого аргумента функции.
  
 
  
<?php /*   До выполнения PHP скрипта сойздайте хранимую процедуру в   SQL*Plus или SQL Developer:   CREATE OR REPLACE FUNCTION myfunc(p IN NUMBER) RETURN NUMBER AS   BEGIN       RETURN p * 3;   END; */ $conn  =  oci_connect ( 'hr' ,  'welcome' ,  'localhost/XE' ); if (! $conn ) {      $e  =  oci_error ();      trigger_error ( htmlentities ( $e [ 'message' ],  ENT_QUOTES ),  E_USER_ERROR ); } $p  =  8 ; $stid  =  oci_parse ( $conn ,  'begin :r := myfunc(:p); end;' ); oci_bind_by_name ( $stid ,  ':p' ,  $p ); oci_bind_by_name ( $stid ,  ':r' ,  $r ,  40 ); oci_execute ( $stid ); print  " $r \n" ;    // выведет 24 oci_free_statement ( $stid ); oci_close ( $conn ); ?> 
 
   
  
 
  Пример #5 Использование PL/SQL хранимых процедур 
  
   При использовании хранимых процедур желательно привязывать переменные 
   к каждому аргументу.
  
 
  
<?php /*   До выполнения PHP скрипта сойздайте хранимую процедуру в   SQL*Plus или 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' ],  ENT_QUOTES ),  E_USER_ERROR ); } $p1  =  8 ; $stid  =  oci_parse ( $conn ,  'begin myproc(:p1, :p2); end;' ); oci_bind_by_name ( $stid ,  ':p1' ,  $p1 ); oci_bind_by_name ( $stid ,  ':p2' ,  $p2 ,  40 ); oci_execute ( $stid ); print  " $p2 \n" ;    // выведет 16 oci_free_statement ( $stid ); oci_close ( $conn ); ?> 
 
   
  
 
  Пример #6 Вызов PL/SQL процедур, возвращающих REF CURSOR  
  
   Каждое возвращаемое значение из запроса является REF
   CURSOR .
  
 
  
<?php /*   Создайте PL/SQL хранимую процедуру:   CREATE OR REPLACE FUNCTION myfunc(p1 IN NUMBER) RETURN SYS_REFCURSOR AS       rc SYS_REFCURSOR;   BEGIN       OPEN rc FOR SELECT city FROM locations WHERE ROWNUM < p1;       RETURN rc;   END; */ $conn  =  oci_connect ( 'hr' ,  'welcome' ,  'localhost/XE' ); $stid  =  oci_parse ( $conn ,  'SELECT myfunc(5) AS mfrc FROM dual' ); oci_execute ( $stid ); echo  "<table border='1'>\n" ; while (( $row  =  oci_fetch_array ( $stid ,  OCI_ASSOC ))) {     echo  "<tr>\n" ;      $rc  =  $row [ 'MFRC' ];      oci_execute ( $rc );   // возвращает значение поля из запроса в виде указателя      while (( $rc_row  =  oci_fetch_array ( $rc ,  OCI_ASSOC ))) {            echo  "    <td>"  .  $rc_row [ 'CITY' ] .  "</td>\n" ;     }      oci_free_statement ( $rc );     echo  "</tr>\n" ; } echo  "</table>\n" ; // Выведет: //   Beijing //   Bern //   Bombay //   Geneva oci_free_statement ( $stid ); oci_close ( $conn ); ?>