Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 DBMS_XMLGEN , bind переменные и сессии  [new]
The Hive
Member

Откуда:
Сообщений: 7
Всем привет. заранее прошу прощения если повторяюсь. По форуму искал, да не нашел ответа.
В общем задача - генерация XML. Средства - DBMS_XMLGEN. Как делаю? Что- то вроде такого.
Create or replace package XML_GEN IS
   person_key number:=30;
   function create_xml return clob;
END;
CREATE OR REPLACE PACKAGE BODY XML_GEN IS
   function create_xml return clob is
   qryCtx DBMS_XMLGEN.ctxHandle;
   result CLOB;
   begin
   qryCtx := dbms_xmlgen.newContext('select name, surname from person where person_key = xml_gen.person_key');
   result := DBMS_XMLGEN.getXML(qryCtx);
   end create_xml;
END;
Ну понятно что это весьма условно. И вот в чем загвоздка при такой нотации - не работает. видимо dbms_xmlgen.newContext() не правильно транслирует пакетную переменную. Хорошо, подумал я и переписал так
qryCtx := dbms_xmlgen.newContext('select name, surname from person where person_key = (select xml_gen.person_key from dual)');
Потирая руки запускаю на выполнение и опять облом. Делаю вывод (вероятно неверный), что dbms_xmlgen.newContext запускается в другой сесии и не видит состояние вызвавшего его пакета. Переписал третий раз - стало это выглядеть так
qryCtx := dbms_xmlgen.newContext('select name, surname from person where person_key ='||xml_gen.person_key||);
Работает, но нужна-то мне bind переменная! И в реальных условиях их будет три. Как такое провернуть - загнать внутрь DBMS_XMLGEN bind переменную?
28 фев 05, 12:51    [1349115]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_XMLGEN , bind переменные и сессии  [new]
stdio
Member

Откуда:
Сообщений: 4524
см. DBMS_XMLQUERY
28 фев 05, 12:59    [1349148]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_XMLGEN , bind переменные и сессии  [new]
thorn
Member

Откуда: Москва
Сообщений: 115
в 10-ке XMLGEN уже умеет биндить переменные.
28 фев 05, 13:35    [1349296]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_XMLGEN , bind переменные и сессии  [new]
The Hive
Member

Откуда:
Сообщений: 7
thorn
в 10-ке XMLGEN уже умеет биндить переменные.

У нас к сожелению только 9 ка.
28 фев 05, 13:41    [1349316]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_XMLGEN , bind переменные и сессии  [new]
The Hive
Member

Откуда:
Сообщений: 7
2 stdio.
Посмотрел ... вроде должно помочь. Даже уже код поправил ... но напосредственно DBMS_XMLQUERY.get_xml возвращает мне такое - ORA-29532: Java call terminated by uncaught Java exception: java.lang.NullPointerException. и где блин я не прав.порядок действий такой
  sql_str := 'select name, surname from person where person_key = B_PERSON_KEY'
  qryCtx := dbms_xmlquery.newContext(sql_str);
  dbms_xmlquery.setBindValue(qryCtx,'B_PERSON_KEY',person_key);
  DBMS_XMLQUERY.setRowSetTag(qryCtx, 'Persons');
  DBMS_XMLQUERY.setRowTag(qryCtx, 'Person_row');
  DBMS_XMLQUERY.useNullAttributeIndicator(qryCtx,TRUE);
  result := DBMS_XMLQUERY.getXML(qryCtx);

Примеров не укого нет?
28 фев 05, 14:21    [1349475]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_XMLGEN , bind переменные и сессии  [new]
stdio
Member

Откуда:
Сообщений: 4524
пиши
'select name, surname from person where person_key = :B_PERSON_KEY'
28 фев 05, 14:27    [1349504]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_XMLGEN , bind переменные и сессии  [new]
The Hive
Member

Откуда:
Сообщений: 7
Класс помогло! Ура спасибо.. позор на мою седую голову.
Так и еще вопросик в догонку.
Как запретить разбор запрещённых esc последоватльностей (&,<,> еtс). ПО документации есть такая процедура setSQLToXMLNameEscaping() но у меня ее нет не фига. Версия Oracle9i Enterprise Edition Release 9.2.0.5.0. Как быть?
28 фев 05, 14:35    [1349546]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_XMLGEN , bind переменные и сессии  [new]
The Hive
Member

Откуда:
Сообщений: 7
Придумал решение, ибо надо проблему быстрее закрывать .. сделал в результирующем clob с XML замену < и > на <и> ...не красиво, но должно работать.
Всем спасибо
28 фев 05, 14:52    [1349642]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_XMLGEN , bind переменные и сессии  [new]
The Hive
Member

Откуда:
Сообщений: 7
thorn
в 10-ке XMLGEN уже умеет биндить переменные.

А ссылки на официальный источник этой информации есть, для моего архитектора. Или цитату из доки. А то у меня нет документации по 10-ке
1 мар 05, 10:56    [1351732]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_XMLGEN , bind переменные и сессии  [new]
thorn
Member

Откуда: Москва
Сообщений: 115
документации у меня не стоит сейчас. В заголовке пакета есть такая процедура:

  PROCEDURE setBindValue(ctx IN ctxHandle, bindName IN VARCHAR2,
    bindValue IN VARCHAR2);
1 мар 05, 11:37    [1351894]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_XMLGEN , bind переменные и сессии  [new]
The Hive
Member

Откуда:
Сообщений: 7
Спасибо. Нашел документацию. С официальными уведомлениями.
1 мар 05, 18:24    [1353988]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: DBMS_XMLGEN , bind переменные и сессии  [new]
burik
Member

Откуда:
Сообщений: 121
А как эту процедуру:
  PROCEDURE setBindValue(ctx IN ctxHandle, bindName IN VARCHAR2,
    bindValue IN VARCHAR2);

загнать в тело пакета?
22 окт 08, 13:35    [6340443]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить