Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование nvl в xmlforest 
V
    Опции темы
v2v
Дата 14.1.2009, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 1
Всего: 56



Код

select 
    xmlelement("A", 
        xmlforest('' as "B")
    ).getStringVal() from dual;

select 
    xmlelement("A", 
        xmlforest(nvl(null,'') as "B")
    ).getStringVal() from dual;

Вроде как одинаковые запросы , да вот результат совсем разный. Как сделать что-бы второй был таким же как первый?


--------------------
PM   Вверх
Zloxa
Дата 14.1.2009, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Удивительное рядом ;)
Код

Connected to Oracle9i Enterprise Edition Release 9.2.0.8.0 
 
select
    xmlelement("A",
        xmlforest('' as "B")
    ).getStringVal() from dual;
 
XMLELEMENT("A",XMLFOREST(''AS"
--------------------------------------------------------------------------------
<A></A>
select
    xmlelement("A",
        xmlforest(nvl(null,'') as "B")
    ).getStringVal() from dual;
 
XMLELEMENT("A",XMLFOREST(NVL(N
--------------------------------------------------------------------------------
<A></A>
 

Код

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 
 
select
    xmlelement("A",
        xmlforest('' as "B")
    ).getStringVal() from dual;
 
XMLELEMENT("A",XMLFOREST(''AS"
--------------------------------------------------------------------------------
<A><B></B></A>
select
    xmlelement("A",
        xmlforest(nvl(null,'') as "B")
    ).getStringVal() from dual;
 
XMLELEMENT("A",XMLFOREST(NVL(N
--------------------------------------------------------------------------------
<A></A>



Цитата(v2v @  14.1.2009,  16:26 Найти цитируемый пост)
Как сделать что-бы второй был таким же как первый

Не использовать XMLForest, использовать XMLElement.
Поведение первого - скорее всего баг, наверняка в будущих релизах будет фикситься.



Это сообщение отредактировал(а) Zloxa - 14.1.2009, 17:40


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
v2v
Дата 14.1.2009, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 1
Всего: 56



это были упрощённые примеры, без xmlforest не обойтись:
Код

select 
    xmlelement("A", 
        xmlforest(
            nvl(null,'') as "B1",
            nvl(null,'') as "B2",
            nvl(null,'') as "B3",
            nvl(null,'') as "B4",
            nvl(null,'') as "B5",
            nvl(null,'') as "B6",
            nvl(null,'') as "B7",
            nvl(null,'') as "B155"            
        )        
    ).getStringVal() from dual;


Добавлено через 51 секунду
у меня 10g

Добавлено через 7 минут и 12 секунд
если я переделаю 1 xmlforest на 155 xmlelement я сильно потеряю в производительности?


--------------------
PM   Вверх
Zloxa
Дата 14.1.2009, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(v2v @  14.1.2009,  17:41 Найти цитируемый пост)
xmlforest не обойтись

Очень даже можно обойтись smile
Код

select
    xmlelement("A"
        ,XMLConcat(
          XmlElement("B1",null)
          ,XmlElement("B2",null)
          ,XmlElement("B3",null)
          )
    ).getStringVal() from dual;
 
XMLELEMENT("A",XMLCONCAT(XMLEL
--------------------------------------------------------------------------------
<A><B1></B1><B2></B2><B3></B3></A>





--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
v2v
Дата 14.1.2009, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 1
Всего: 56



Цитата(v2v @  14.1.2009,  17:41 Найти цитируемый пост)

Добавлено через 7 минут и 12 секунд
если я переделаю 1 xmlforest на 155 xmlelement я сильно потеряю в производительности? 




--------------------
PM   Вверх
Zloxa
Дата 14.1.2009, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(v2v @  14.1.2009,  17:54 Найти цитируемый пост)
если я переделаю 1 xmlforest на 155 xmlelement я сильно потеряю в производительности? 

А попробовать?
Код

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 
 
SQL> 
set timing on;
declare
  s varchar2(32000);
  result varchar2(32000);
begin
  s := 'select xmlElement("A",XMLForest(';
  for i in 1..300 loop
    if i  > 1  then s := s ||','; end if;
    s := s || ''''' as "B'||I||'"';
  end loop;
  s := s||')).GetStringVal() from dual';
  for i in 1..1000
  loop
    execute immediate s into result;
  end loop;
end;
/
 
PL/SQL procedure successfully completed
 
Executed in 2.828 seconds
declare
  s varchar2(32000);
  result varchar2(32000);
begin
  s := 'select xmlElement("A",XMLConcat(';
  for i in 1..300 loop
    if i  > 1  then s := s ||','; end if;
    s := s || 'XMLElement("B'||I||'",null)';
  end loop;
  s := s||')).GetStringVal() from dual';
  for i in 1..1000
  loop
    execute immediate s into result;
  end loop;
end;
/
 
PL/SQL procedure successfully completed
 
Executed in 2.719 seconds




--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
v2v
Дата 14.1.2009, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 1
Всего: 56



А я протестировал, и получил 25% разницы в пользу XmlForest

Код

declare
    lv_start_time number;
    lv_sum_time1 number := 0;    
    lv_sum_time2 number := 0;
    lv_var varchar2(4000) /*xmltype*/;
begin
    lv_start_time:= sysdatemillis;
    for i in 1..10000 loop
    select 
     xmlelement("A", 
        xmlforest(
            nvl(null,'') as "B1",
            nvl(null,'') as "B2",
            nvl(null,'') as "B3",
            nvl(null,'') as "B4",
            nvl(null,'') as "B5",
            nvl(null,'') as "B6",
            nvl(null,'') as "B7",
            nvl(null,'') as "B8",
            nvl(null,'') as "B9",
            nvl(null,'') as "B10",
            nvl(null,'') as "B11",
            nvl(null,'') as "B12",
            nvl(null,'') as "B13",
            nvl(null,'') as "B14",
            nvl(null,'') as "B15",
            nvl(null,'') as "B16",
            nvl(null,'') as "B17",
            nvl(null,'') as "B18",
            nvl(null,'') as "B19",
            nvl(null,'') as "B20"
        )        
    ).getStringVal() into lv_var from dual;
    end loop;    
    lv_sum_time1 :=  lv_sum_time1 + sysdatemillis - lv_start_time;
    
    lv_start_time:= sysdatemillis;
    for i in 1..10000 loop
    select 
     xmlelement("A",        
            xmlelement("B1",nvl(null,'')),
            xmlelement("B2",nvl(null,'')),
            xmlelement("B3",nvl(null,'')),
            xmlelement("B4",nvl(null,'')),
            xmlelement("B5",nvl(null,'')),
            xmlelement("B6",nvl(null,'')),
            xmlelement("B7",nvl(null,'')),
            xmlelement("B8",nvl(null,'')),
            xmlelement("B9",nvl(null,'')),
            xmlelement("B10",nvl(null,'')),
            xmlelement("B11",nvl(null,'')),
            xmlelement("B12",nvl(null,'')),
            xmlelement("B13",nvl(null,'')),
            xmlelement("B14",nvl(null,'')),
            xmlelement("B15",nvl(null,'')),
            xmlelement("B16",nvl(null,'')),
            xmlelement("B17",nvl(null,'')),
            xmlelement("B18",nvl(null,'')),
            xmlelement("B19",nvl(null,'')),
            xmlelement("B20",nvl(null,''))            
        ).getStringVal()        
    into lv_var from dual;
    end loop;
    lv_sum_time2 :=  lv_sum_time2 + sysdatemillis - lv_start_time;  
    PUT('1:<'||lv_sum_time1||'>'||'2:<'||lv_sum_time2||'>');
end;
/


Цитата

1:<1011>2:<1319>                                                                
1:<1000>2:<1316>                                                                
1:<798>2:<1064>                                                                 
1:<789>2:<1063>                                                                 
1:<789>2:<1067>                                                                 
1:<787>2:<1066>                                                                 
1:<799>2:<1067>                                                                 
1:<782>2:<1060>                                                                 
1:<783>2:<1059>


Добавлено через 56 секунд
Спасибо за помощь, убедил оставить хмл без тегов. так что задача решена.


--------------------
PM   Вверх
Zloxa
Дата 15.1.2009, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(v2v @  14.1.2009,  18:50 Найти цитируемый пост)
А я протестировал, и получил 25% разницы в пользу XmlForest

В результате ты получаешь XML РАЗЛИЧНОЙ структуры. 
Если цель теста - сравинить производительность технологий, результаты твоего теста не корректны.
Если цель теста - сравинить затраты на формирование XML различных типов, результат теста вполне приемлем.

Цитата(v2v @  14.1.2009,  18:50 Найти цитируемый пост)
убедил оставить хмл без тегов

Я тебя не убеждал. ;)
ты спросил как сформировать XML нужной для тебя структуры - я ответил.
О том, что ты не ограничен в выборе формата, мне было не известно, скорее наоборот, я думал ты ограничен им smile

Это сообщение отредактировал(а) Zloxa - 15.1.2009, 09:48


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
v2v
Дата 26.2.2009, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 1
Всего: 56



Цитата(Zloxa @  15.1.2009,  09:46 Найти цитируемый пост)

Я тебя не убеждал. ;)

не ты меня, а я убедил, того кого надо smile



Цитата(Zloxa @  15.1.2009,  09:46 Найти цитируемый пост)

В результате ты получаешь XML РАЗЛИЧНОЙ структуры. 

если различность только в том выводить или не выводить пустые теги , то да, такой тест на производительность приемлем. 



--------------------
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.1492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.