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

Откуда: Екатеринодар
Сообщений: 1439
  SELECT *
    FROM v$version;

      BANNER                                                         
      ----------------------------------------------------------------
      Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi 
      PL/SQL Release 10.2.0.5.0 - Production                           
      CORE	10.2.0.5.0	Production                                         
      TNS for 64-bit Windows: Version 10.2.0.5.0 - Production          
      NLSRTL Version 10.2.0.5.0 - Production  






  SELECT interval '0 2:00:00.00' day to second  as res 
    FROM dual;

      RES       
      -----------
      0 2:0:0.0




  SELECT interval t.v day to second as res
    FROM (select '0 2:00:00.00' as v
            from dual ) t;
            

      Error starting at line 14 in command:
      SELECT interval t.v day to second as res
          FROM (select '0 2:00:00.00' as v
                  from dual ) t
      Error at Command Line:14 Column:18
      Error report:
      SQL Error: ORA-00923: FROM keyword not found where expected
      00923. 00000 -  "FROM keyword not found where expected"
      *Cause:    
      *Action:


Возможно туплю, но все же, почему?
22 апр 13, 12:14    [14211983]     Ответить | Цитировать Сообщить модератору
 Re: interval в подзапросе  [new]
-2-
Member

Откуда:
Сообщений: 15330
Максим Н
Возможно туплю, но все же, почему?
в первом случае вполне нормальный литерал.
а во втором - потому что нет такой конструкции в оракловом sql.
22 апр 13, 12:18    [14212018]     Ответить | Цитировать Сообщить модератору
 Re: interval в подзапросе  [new]
Максим Н
Member

Откуда: Екатеринодар
Сообщений: 1439
-2-,

Тогда вопрос:

интервалы ко мне приходят в xml, после чего их нужно распарсить и выполнить некие операции.

Получаю справедливую ошибку:
  SELECT sysdate - t.extract('r/interval/text()')
    FROM table(xmlsequence(xmltype('<all><r><interval>0 1:00:00.00</interval></r><r><interval>0 2:00:00.00</interval></r></all>').EXTRACT('all/r'))) t;



  Error starting at line 43 in command:
  SELECT sysdate - t.extract('r/interval/text()')
      FROM table(xmlsequence(xmltype('<all><r><interval>0 1:00:00.00</interval></r><r><interval>0 2:00:00.00</interval></r></all>').EXTRACT('all/r'))) t
  Error report:
  SQL Error: ORA-00932: inconsistent datatypes: expected NUMBER got -
  00932. 00000 -  "inconsistent datatypes: expected %s got %s"
  *Cause:    
  *Action:


Как кастануть данные к интервалам после парсинга?
22 апр 13, 12:32    [14212120]     Ответить | Цитировать Сообщить модератору
 Re: interval в подзапросе  [new]
123йй
Member

Откуда:
Сообщений: 1638
Максим Н,

автор
SELECT sysdate - t.extract('r/interval/text()')

от даты вычитаем текст ?

select sysdate - interval '0 2:00:00.00' day to second from dual
22 апр 13, 12:35    [14212153]     Ответить | Цитировать Сообщить модератору
 Re: interval в подзапросе  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Максим Н,

некие операции требуют некой конкретизации, в частности - некой типизации неких опреандов
22 апр 13, 12:39    [14212175]     Ответить | Цитировать Сообщить модератору
 Re: interval в подзапросе  [new]
Максим Н
Member

Откуда: Екатеринодар
Сообщений: 1439
123йй
Максим Н,

автор
SELECT sysdate - t.extract('r/interval/text()')

от даты вычитаем текст ?


Это я специально, для демонстрации.

123йй
select sysdate - interval '0 2:00:00.00' day to second from dual


Это я понимаю, с литералом работает, меня интересуют значения из запроса.
22 апр 13, 12:39    [14212180]     Ответить | Цитировать Сообщить модератору
 Re: interval в подзапросе  [new]
Максим Н
Member

Откуда: Екатеринодар
Сообщений: 1439
orawish
Максим Н,

некие операции требуют некой конкретизации, в частности - некой типизации неких опреандов



операнды лежат в xml-е
22 апр 13, 12:41    [14212203]     Ответить | Цитировать Сообщить модератору
 Re: interval в подзапросе  [new]
-2-
Member

Откуда:
Сообщений: 15330
Максим Н,

SELECT sysdate - xmlcast(t.extract('r/interval/text()') as interval day to second)
    FROM table(xmlsequence(xmltype('<all><r><interval>0 1:00:00.00</interval></r><r><interval>0 2:00:00.00</interval></r></all>').EXTRACT('all/r'))) t;
    
    SYSDATE-XMLCAST(T.EXTRACT('R/INTERVAL/TEXT()')ASINTERVALDAYTOSECOND)
--------------------------------------------------------------------
2013-04-22 11:42:55                                                  
2013-04-22 10:42:55      
22 апр 13, 12:44    [14212220]     Ответить | Цитировать Сообщить модератору
 Re: interval в подзапросе  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Максим Н
orawish
Максим Н,

некие операции требуют некой конкретизации, в частности - некой типизации неких опреандов



операнды лежат в xml-е

если вы хотите нечто (навроде преобразования типов) обсудить - так потрудитесь сформулировать
1) что именно вам надо,
2) как это вы пытаетесь сделать
3) в чём проблема
22 апр 13, 12:45    [14212236]     Ответить | Цитировать Сообщить модератору
 Re: interval в подзапросе  [new]
123йй
Member

Откуда:
Сообщений: 1638
Максим Н,
sysdate-to_dsinterval(trim(t.extract('r/interval/text()')))
22 апр 13, 12:45    [14212237]     Ответить | Цитировать Сообщить модератору
 Re: interval в подзапросе  [new]
Максим Н
Member

Откуда: Екатеринодар
Сообщений: 1439
Всем спасибо, объяснили.
22 апр 13, 12:50    [14212283]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить