В некоторых случаях использование курсорного выражения в SELECT дает выгоду и вне программы.
Средства XSQL, поставляемые в рамках штатной поставки ПО СУБД Oracle («XML Development Kit», XDK), позволяют хранить на сервере web сервлет, порождающий по запросу SELECT к базе данных документ XML. Этот сервлет способен обрабатывать ссылки на курсор, порождаемые курсорным выражением.
Подготовим файл departments.xsql: <?xml version="1.0"? <xsql:query connection="demo" xmlns:xsql="urn:oracle-xsql" SELECT dname ,CURSOR ( SELECT ename FROM emp WHERE emp.deptno = dept.deptno )
AS employees
FROM dept </xsql:query
Создадим каталог company в месте файловой системы, предусмотренным в Oracle для расположения файлов формата XSQL. Например, при установленном расширении XDK ПО Oracle версии 9.2 этим местом может быть $ORACLE_HOME/xdk/demo/java. Обратимся браузером по адресу
http://localhost:7778/xsql/company/departments.xsql (сервер HTTP при этом должен быть запущен). Получим примерно такой результат:
В этом изображении для краткости узлы ROW с атрибутами num = "2" и num = "3" свернуты средствами браузера.
Полученный документ XML может играть для сервера приложений в web как самостоятельную роль (выдавая результат обращений по определенному адресу в web в формате XML), так и роль исходного материала для дальнейшего преобразования XSL (выдавая результат в конечном итоге в формате HTML, в том числе с графическим оформлением). Эти преобразования здесь не рассматриваются, как не относящиеся к возможностям собственно Oracle.
Замечательно, что обрабатывающий запросы XSQL сервлет, разработанный фирмой Oracle, способен обрабатывать не только одиночные, но и вложенные выражения типа CURSOR. Подготовим еще один файл multicursor.xsql и положим его в тот же каталог company: <?xml version="1.0"? <xsql:query connection="demo" xmlns:xsql="urn:oracle-xsql" SELECT TO_CHAR ( SYSTIMESTAMP,'SS:FF3' ) AS seconds , CURSOR ( SELECT TO_CHAR ( SYSTIMESTAMP,'SS:FF3' ) secondsone , CURSOR ( SELECT TO_CHAR( SYSTIMESTAMP,'SS:FF3' ) AS secondstwo