oci_new_cursor

(PHP 5, PECL OCI8 >= 1.1.0)

oci_new_cursorВозвращает идентификатор созданного курсора

Описание

resource oci_new_cursor ( resource $connection )

Создает новый курсор для указанного соединения и возвращает его идентификатор.

Список параметров

connection

Идентификатор соединения с сервером Oracle, возвращаемый функцией oci_connect() или oci_pconnect().

Возвращаемые значения

Возвращает указатель на новое выражение или FALSE в случае ошибки.

Примеры

Пример #1 Использование REF CURSOR в хранимых процедурах Oracle

<?php
// предположим, что хранимая процедура info.output возвращает ссылочный курсор в
:data

$conn 
oci_connect("scott""tiger");
$curs oci_new_cursor($conn);
$stmt oci_parse($conn"begin info.output(:data); end;");

oci_bind_by_name($stmt"data"$curs, -1OCI_B_CURSOR);
oci_execute($stmt);
oci_execute($curs);

while (
$data oci_fetch_row($curs)) {
    
var_dump($data);
}

oci_free_statement($stmt);
oci_free_statement($curs);
oci_close($conn);
?>

Пример #2 Использование REF CURSOR в запросах Oracle

<?php
echo "<html><body>";
$conn oci_connect("scott""tiger");
$count_cursor "CURSOR(select count(empno) num_emps from emp " .
                
"where emp.deptno = dept.deptno) as EMPCNT from dept";
$stmt oci_parse($conn"select deptno,dname,$count_cursor");

oci_execute($stmt);
echo 
"<table border=\"1\">";
echo 
"<tr>";
echo 
"<th>DEPT NAME</th>";
echo 
"<th>DEPT #</th>";
echo 
"<th># EMPLOYEES</th>";
echo 
"</tr>";

while (
$data oci_fetch_assoc($stmt)) {
    echo 
"<tr>";
    
$dname  $data["DNAME"];
    
$deptno $data["DEPTNO"];
    echo 
"<td>$dname</td>";
    echo 
"<td>$deptno</td>";
    
oci_execute($data["EMPCNT"]);
    while (
$subdata oci_fetch_assoc($data["EMPCNT"])) {
        
$num_emps $subdata["NUM_EMPS"];
        echo  
"<td>$num_emps</td>";
    }
    echo 
"</tr>";
}
echo 
"</table>";
echo 
"</body></html>";
oci_free_statement($stmt);
oci_close($conn);
?>

Примечания

Замечание:

В версиях PHP ниже 5.0.0 эта функция называлась ocinewcursor(). В PHP 5.0.0 и выше ocinewcursor() является алиасом oci_new_cursor(), поэтому вы можете продолжать использовать это имя, однако это не рекомендуется.

Коментарии

Because OCI8 uses "prefetching" to greatly improve returning query results, but Oracle doesn't support prefetching for REF CURSORs, application performance using REF CURSORs can be greatly improved by writing a PL/SQL function that pulls data from the REF CURSOR and PIPEs the output. The new function can be queried in a SELECT as if it were a table.  See http://blogs.oracle.com/opal/2008/11/
converting_ref_cursor_to_pipe.html
2008-11-05 14:13:05
http://php5.kiev.ua/manual/ru/function.oci-new-cursor.html
Oracle 11.2 introduced support for REF CURSOR prefetching
2010-01-28 00:41:51
http://php5.kiev.ua/manual/ru/function.oci-new-cursor.html
Some packages in oracle are functions, and that functions returns a cursor.

For example:

CREATE FUNCTION F_Function( p1 char(2), p2 int)
  RETURN SYS_REFCURSOR
AS
  my_cursor SYS_REFCURSOR;
BEGIN
  OPEN my_cursor FOR SELECT * FROM allitems 
                           WHERE (cod=p1) 
                                      AND (Number=p2);
  RETURN my_cursor;
END F_Function; 

Here is the code that allows to obtain data from a function that returns a cursor.

<pre>
<?php
 $conn
=oci_connect("server""user""pass");
if (!
$conn) {
   
$e oci_error();
   
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}

   
//You must asign before.
   
$p1 '03';
   
$p2 2012016191;

   
$stid oci_parse($conn'begin :cursor := server.PKG_package.F_Function(:p1,:p2); end;');
   
$p_cursor oci_new_cursor($conn);

   
//Send parameters variable  value  lenght
   
oci_bind_by_name($stid':p1'$p1,2);
   
oci_bind_by_name($stid':p2'$p2,10);

   
//Bind Cursor     put -1 
   
oci_bind_by_name($stid':cursor'$p_cursor, -1OCI_B_CURSOR);

   
// Execute Statement
   
oci_execute($stid);
   
oci_execute($p_cursorOCI_DEFAULT);

   
oci_fetch_all($p_cursor$cursornullnullOCI_FETCHSTATEMENT_BY_ROW);
    echo 
'<br>';
   
print_r($cursor);
 
?>
2012-11-08 23:15:18
http://php5.kiev.ua/manual/ru/function.oci-new-cursor.html

    Поддержать сайт на родительском проекте КГБ