Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » СУБД Oracle (Оракл - для поиска:)).

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

Открыть новую тему     Написать ответ в эту тему

tanaseduard



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
catchturbina
 
Да.

Код:
 
 os_Session.SavePoint(PointName:String);
 os_Session.RollbackToSavepoint(PointName:String);
 

Всего записей: 518 | Зарегистр. 21-11-2009 | Отправлено: 12:43 08-12-2010
IpEr

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброе время суток!  
 
Возникла проблема:  
В результате работы select1 выдается рез-тат 16 строк. Примерное время выполения 3-4с. Среда 10G.  
В этом запросе выводятся X, Y , X*Y as Z.  
Где X - столбец
Y - select0, возвращающий столбец
 
В конечном итоге должно получиться SUM(Z) и если добавить так:  
select SUM(Z) from select1  
то после 20 минутного раздумья выдается ошибка: ORA 01652 невозможно увеличить временный сегмент до 128...  
 
Есть ли возможность сохранить select1 в какую-нибудь таблицу Temp1 из которой собственно и извлечь затем сумму интересующего столбца?  
 
Спасибо.

Всего записей: 17 | Зарегистр. 09-03-2006 | Отправлено: 09:41 21-01-2011
jonikDk



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
можно но надо в начале эту временную таблицу создать, затем записать в нее данные и затем только выберешь ты свою сумму.
Написал бы лучше полностью свой select, а то спрашиваешь а исходныве данные не приводишь

Всего записей: 1605 | Зарегистр. 01-03-2004 | Отправлено: 12:48 21-01-2011
IpEr

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Собственно:

Код:
 
select  v.acc_end_val,
 
v.acc_end_val* (select value  
from (select date_price, value, code from table1.t_fi f,  table1.t_fi_price p, table1.v_lic_acc_value v where f.id=p.link_fi and v.fi_code=f.code and date_price<'02.05.2010'  
order by date_price desc) where rownum=1 and v.fi_code=code) as stoimost
 
from table1.v_lic_acc_value v,table1.t_fi f, table1.t_list_fi_type t
where    
     v.date_cal_from = to_date('01.05.2010' , 'dd.mm.yyyy')    
 and v.date_cal_to = to_date('01.05.2010' , 'dd.mm.yyyy')      
 and v.acc_end_val!='0'
 and v.depo_acc_num='MS9403170488'
 and v.section_type_name='Основной'
 and v.fi_code=f.code
 and f.link_fi_type=t.id
 and t.id='100142574';
 
Рез-тат:
v.acc_end_val  |STOIMOST
501                 |601781.16
30422820        |49174533563.4
10200000        |0
 

 
Требуется sum(STOIMOST) - ora 01652
 
Все таки сохранить рез-тат в таблицу для меня не выход т.к. правов нет. Надо переделать сам select: м.б. не нравится СУБД когда в агрегатной функции указывается псевдостолбец STOIMOST и надо по ID столбца? Потому-что sum(v.acc_end_val ) нормально считается.

Всего записей: 17 | Зарегистр. 09-03-2006 | Отправлено: 13:40 21-01-2011
svavka



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
1. попробуй поточней говорить ораклу что откуда, вот у тебя в подзапросе

Код:
 
select value  
    (select date_price, value, code  
      from table1.t_fi f,  table1.t_fi_price p, table1.v_lic_acc_value v  
      where  
        f.id=p.link_fi and  
       v.fi_code=f.code and  
       date_price<'02.05.2010'  
       order by date_price desc)  
     where rownum=1 and v.fi_code=code
 

 
непонятна может быть сформулировано условие v.fi_code=code, тк code у тебя не в одной таблице (в том числе и внешних)... ну и в таком стиле по всему запросу
 
2. попробуй применить агрегатные функции...  
 
Добавлено:
а STOIMOST тут нипричем, ничего ты тут не нарушаешь

Всего записей: 21 | Зарегистр. 22-04-2009 | Отправлено: 00:52 22-01-2011
SIgor33

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
IpEr
Попробуй в качестве соединений inner join использовать

Всего записей: 652 | Зарегистр. 03-03-2009 | Отправлено: 10:08 23-01-2011
alexsob

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
IpEr
Непонятно, тебе нужно так что-ли:
  select X,Y, SUM(X*Y) as Z
   group by X,Y
так это какая-то несуразность. А если так
  select SUM(X*Y) as Z
то суммируй себе на здоровье. Как вариант, ведь можно select sum(X*Y) from (select X, (select ..) as Y) и т.п.
 
Кстати, "order by date_price desc" внутри подзапроса выглядит, мягко говоря, неуместно. Кроме торможения это ничего не дает.

Всего записей: 124 | Зарегистр. 28-02-2005 | Отправлено: 07:34 27-01-2011 | Исправлено: alexsob, 07:36 27-01-2011
IpEr

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
svavka
 
Спасибо.
После 1 пункта Ваших указаний, и нахождения общего языка с ораклом  - наконец-то получилось. К сожалению, сам не понял почему заработало, но рез-тат важнее.
 
 
 
alexsob
 
Проблема была в том, что на это:  
select sum(X*Y) from (select X, (select ..) as Y) и т.п. выдавалось - ошибка ora 01652.
 
А по поводу "order by date_price desc"  - ничего лучше не смог придумать. Если есть какие-либо приемы подскажите:
требуется вывести строку из таблицы с максимальным(минимальным) значением по какому-либу столбцу.

Всего записей: 17 | Зарегистр. 09-03-2006 | Отправлено: 10:00 27-01-2011
svavka



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
IpEr - требуется вывести строку из таблицы с максимальным(минимальным) значением по какому-либу столбцу
 
 агрегатные функции (First_vaue(Last_Value))  помогут
  пример  
    select t.otdel,t.price,t.data
      first_value(t.price) over (partition by t.otdel order by t.data desc)  last_price,
      max(t.price) over (partition by t.otdel)  max_price
 
     from testtable t
 
объяснение работы
    оракл разбивает выборку (partition by) на окна(отдельные строки) по критерию t.otdel
    при этом сортируя по дате (order by t.data), функция first_value(t.price) выберет из окна первое значение, с max я думаю все понятно.
 
вообще штука полезная  
вот более конкретные описания с перечислением всех возможностей
http:/ /download. oracle. com/ docs/cd/B19306_01/server.102/b14223/analysis.htm
     
 

Всего записей: 21 | Зарегистр. 22-04-2009 | Отправлено: 18:29 27-01-2011 | Исправлено: svavka, 01:59 28-01-2011
well2

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Скажите, Oracle 10.2.0.3 в Windows XP работает?

Всего записей: 63 | Зарегистр. 28-10-2002 | Отправлено: 16:46 23-03-2011
slaj1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
well2
работает
 
просто нужно использовать правильный дистрибутив

Всего записей: 913 | Зарегистр. 23-06-2003 | Отправлено: 17:22 23-03-2011 | Исправлено: slaj1, 17:48 23-03-2011
well2

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А какой правильный?  
В Download вижу только такую строчку для 10.2.0.3  
Oracle Database 10g Release 2 (10.2.0.3/10.2.0.4) for Microsoft Windows Vista, Windows Server 2008, Windows 7

Всего записей: 63 | Зарегистр. 28-10-2002 | Отправлено: 20:23 23-03-2011
alexsob

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
По поводу релизов Oracle.
Ни у кого не завалялся релиз 7 версии под WinNT / XP ? (хотя под XP был уже 8 релиз, по-моему)

Всего записей: 124 | Зарегистр. 28-02-2005 | Отправлено: 13:29 06-07-2011
GrabovVV



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ, может кто в курсе,  
Oracl Express для 2008 R2 x64  есть, или планируется??

Всего записей: 40 | Зарегистр. 18-01-2010 | Отправлено: 12:01 05-09-2011
omm



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GrabovVV
imho для 64-битных windows версий XE не будет.

Всего записей: 619 | Зарегистр. 17-12-2001 | Отправлено: 15:11 06-09-2011
wasilissk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
omm
Но почему? Для линуха же есть. Думаю в ближайшем месяце зарелизятся.

Всего записей: 293 | Зарегистр. 25-12-2006 | Отправлено: 15:34 06-09-2011
omm



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
wasilissk
10-ки XE под win 64 не было. imho в 11-й вряд ли что-то изменится.

Всего записей: 619 | Зарегистр. 17-12-2001 | Отправлено: 22:56 10-09-2011
wasilissk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
omm
Так и линуха 64 тоже не было.

Всего записей: 293 | Зарегистр. 25-12-2006 | Отправлено: 09:10 12-09-2011
rrromano



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
11 Oracle XE есть для Windows 32 и Linux 64. Делаем выводы.
Я, к стати, устанавливал на Windows Server x64 oracle XE 10, но с танцами и, естественно,он от этого не стах 64-битным. )

Всего записей: 283 | Зарегистр. 20-09-2006 | Отправлено: 19:03 12-09-2011
wasilissk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
rrromano
Я про 10 XE линух писал, его не было 64.

Всего записей: 293 | Зарегистр. 25-12-2006 | Отправлено: 08:17 13-09-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » СУБД Oracle (Оракл - для поиска:)).


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru