Сервер:
 
вход в систему
логин:   
пароль:  
 
 
меню
совет

Синтаксис:

<req:Rowset connection="имя_соединения">
  <req:Request>
    имя_пакета.имя_процедуры(параметр_1,... параметр_N, ?)
  </req:Request>
</req:Rowset>

Команда вызывает на выполнение указанную процедуру. Допускается один выходной параметр типа REF CURSOR. В остальном команда аналогична команде req:Query

Пример:

Курсор объявлен в пакете COMMON следующим образом:

  TYPE ref_cursor IS REF CURSOR;

Таблица:

  CREATE TABLE web_test
    (ID  NUMBER,
    NAME VARCHAR2(30));
  INSERT INTO web_test
       VALUES (1, 'row1');
  INSERT INTO web_test
       VALUES (2, 'row2');
  INSERT INTO web_test
       VALUES (3, 'row3');

Код процедуры (пакет ORA_WEB_TEST):

  PROCEDURE get_web_test (cur IN OUT common.ref_cursor)
  IS
  BEGIN
    OPEN cur
     FOR
       SELECT *
         FROM web_test;
  END;

Код:

<table border="1">
<Execute>
  <req:Rowset connection="docsDB">
    <req:Request>
      ora_web_test.get_web_test(?)
    </req:Request>
  </req:Rowset>
  <Result>
    <tr>
      <td>
        <res:RowNum/>
      </td>
      <td>
        <res:ID/>
      </td>
      <td>
        <res:NAME/>
      </td>
    </tr>
  </Result>
</Execute>
</table>

Результат:


Команда может также использоваться для получения данных из коллекций объектов. Такие коллекции бывают необходимы, когда перед возвращением выборки данных клиенту нужно провести над ними некоторые операции. Подробней см. здесь. Следующий пример это демонстрирует.

Код процедуры (пакет ORA_WEB_TEST):

  PROCEDURE get_table (out_cur IN OUT common.ref_cursor)
  IS
    i         BINARY_INTEGER := 1;
    v_array   coll_v_array;
  BEGIN
    v_array := coll_v_array ();

    FOR v_rec IN (SELECT *
                    FROM web_test) LOOP
      v_array.EXTEND (1);
      v_array (i) := obj_v_array (v_rec.ID, v_rec.NAME);
      i := i + 1;
    END LOOP;

    OPEN out_cur
     FOR
       SELECT *
         FROM TABLE (CAST (v_array AS coll_v_array));
  END;

Объявление типа obj_v_array:

CREATE OR REPLACE 
TYPE obj_v_array
AS OBJECT
(
  id    NUMBER,
  name  VARCHAR2(30)
);

Объявление типа coll_v_array:

CREATE OR REPLACE 
TYPE coll_v_array
 AS TABLE OF OBJ_V_ARRAY;

Код:

<table border="1">
<Execute>
  <req:Rowset connection="docsDB">
    <req:Request>
      ora_web_test.get_table(?)
    </req:Request>
  </req:Rowset>
  <Result>
    <tr>
      <td>
        <res:ID/>
      </td>
      <td>
        <res:NAME/>
      </td>
    </tr>
  </Result>
</Execute>
</table>

Результат:

форум
сообщить об ошибке Центр Новых Информационных Технологий