powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Заполнение данных за два года помесячно
20 сообщений из 20, страница 1 из 1
Заполнение данных за два года помесячно
    #39471510
Валерка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть оракловая таблица с 24 столбцами, в которые необходимо занести данные за два года помесячно. Строк примерно 20 тыс.
В FoxPro делалось просто: два цикла, по годам и месяцам, и заполнялось поле pole&gg$mm. Типа такого
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
for gg=2015 to 2016
     for mm=1 to 12
         --
         вычисляем значение переменной tmp
         --
         записываем в поле БД значение переменной
         repl pole&gg$mm with tmp
     endfor
endfor


Как такое реализовать на PL/SQL? Сколько искал, ничего не нашел...
...
Рейтинг: 0 / 0
Заполнение данных за два года помесячно
    #39471513
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерканеобходимо занести данныеinsert
...
Рейтинг: 0 / 0
Заполнение данных за два года помесячно
    #39471526
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерка,

В pl/sql также можно использовать вложенные for-циклы. Команда обновления записи в таблице - update. PL/SQL Language Reference .
...
Рейтинг: 0 / 0
Заполнение данных за два года помесячно
    #39471530
Валерка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я наверно непонятно написал...
Вопрос не по синтаксису insert или update, там все понятно и хелпов полно.
Вопрос в том как избежать 24х повторений одного и того же а заполнить pole&gg&mm в цикле. То есть вместо

Код: plsql
1.
2.
3.
4.
5.
6.
7.
 вычислили переменную tmp
   заполнили pole201501=tmp
 вычислили переменную tmp
   заполнили pole201502=tmp
----
 вычислили переменную tmp
   заполнили pole201612=tmp



использовать цикл??
...
Рейтинг: 0 / 0
Заполнение данных за два года помесячно
    #39471537
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВалеркаЯ наверно непонятно написал...
Вопрос не по синтаксису insert или update, там все понятно и хелпов полно.
Вопрос в том как избежать 24х повторений одного и того же а заполнить pole&gg&mm в цикле. То есть вместо

Код: plsql
1.
2.
3.
4.
5.
6.
7.
 вычислили переменную tmp
   заполнили pole201501=tmp
 вычислили переменную tmp
   заполнили pole201502=tmp
----
 вычислили переменную tmp
   заполнили pole201612=tmp



использовать цикл??Тебе следует отключать свое фокспрошное мышление.
Зачем использовать цикл если без него можно обойтись?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
insert into ...
select y.gg, m.mm, calc_tmp(gg, mm)
from
 (select '2015' gg from dual union all select '2016' from dual) y
cross join
 (select rownum mm from dual connect by rownum <= 12) m
order by 1, 2
...
Рейтинг: 0 / 0
Заполнение данных за два года помесячно
    #39471553
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нужно разложить по 12 полочкам то что положено в одну стопку, то можно например так:

Код: plsql
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.
with
-- gen year series 2015 - 2016
y ( yyyy ) as ( select level + 2014 from dual connect by level < 3)
--- gen month series 1 - 12
,m ( mm ) as ( select level from dual connect by level < 13 )
--  source table 
, s ( yyyy, mm, x ) as (select yyyy,mm,dbms_random.value(1,100) from y,m)
-- main select
select * from s
pivot (
sum(x) for mm in (
 1 as C1
,2 as C2
,3 as C3
,4 as C4
,5 as C5
,6 as C6
,7 as C7
,8 as C8
,9 as C9
,10 as C10
,11 as C11
,12 as C12
))
order by 1
/
...
Рейтинг: 0 / 0
Заполнение данных за два года помесячно
    #39471594
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валеркаиспользовать цикл??ключевой вопрос не что использовать, а как хранятся исходные данные и зачем их куда-то перекладывать.
...
Рейтинг: 0 / 0
Заполнение данных за два года помесячно
    #39471597
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерка,

Код: plsql
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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
SQL> ed
Wrote file afiedt.buf

  1* create table t (id int,pole17$01 number,pole17$02 number,pole17$03 number)
SQL> /

Table created.

SQL> insert into t(id) values (1);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from t;

        ID  POLE17$01  POLE17$02  POLE17$03
---------- ---------- ---------- ----------
         1

declare
 v_f number;
begin
for gg in 2017..2017 loop
     for mm in 1..3 loop
         --
         --вычисляем значение переменной tmp
         --
         v_f:=sin(gg*mm);
         --записываем в поле БД значение переменной
         --repl pole gg$mm with tmp
         null;
         execute immediate 'update t set pole'||substr(gg,-2)||'$'||to_char(mm,'fm00')
           ||'=:f where id=1' using v_f;
     end loop;
end loop;
end;
/

SQL> /

PL/SQL procedure successfully completed.

SQL> select * from t;

        ID  POLE17$01  POLE17$02  POLE17$03
---------- ---------- ---------- ----------
         1 ,097361914 ,193798704 ,288394035



....
stax
...
Рейтинг: 0 / 0
Заполнение данных за два года помесячно
    #39471599
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

Да не перекладывать ему надо, а обновить. repl в foxpro - это то же, что update в oracle.
...
Рейтинг: 0 / 0
Заполнение данных за два года помесячно
    #39471624
Валерка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
20тыщ абонентов. по каждому из них нужно в таблицу закинуть расход помесячный.
cross join тут не поможет.
Pivot тоже не поможет,
А вот
stax.. execute immediate 'update t set pole'||substr(gg,-2)||'$'||to_char(mm,'fm00')||'=:f where id=1' using v_f;

то что доктор прописал!!!!
Спасибо огромнейшее
...
Рейтинг: 0 / 0
Заполнение данных за два года помесячно
    #39471625
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерка,


Доктор, видимо, про merge не слышал. Но на твоих объемах пофиг.
...
Рейтинг: 0 / 0
Заполнение данных за два года помесячно
    #39471629
Валерка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshop,

merge штука хорошая. Но мне кажется конкретно в моей ситуацией она врядли поможет. Хотя покопаюсь, может я не прав....
...
Рейтинг: 0 / 0
Заполнение данных за два года помесячно
    #39471634
Валеркамне кажется
аргумент.
...
Рейтинг: 0 / 0
Заполнение данных за два года помесячно
    #39471636
Валерка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВалерончикВалеркамне кажется
аргумент.
merge использовал всего пару раз за 6 лет работы, поэтому и "кажется"
...
Рейтинг: 0 / 0
Заполнение данных за два года помесячно
    #39471639
Валеркаmerge использовал всего пару раз за 6 лет работы, поэтому и "кажется"
А, ну тогда да. Извини.
...
Рейтинг: 0 / 0
Заполнение данных за два года помесячно
    #39471883
ВалеркаВалерончикпропущено...

аргумент.
merge использовал всего пару раз за 6 лет работы, поэтому и "кажется"

А когда кажется, то креститься надо!
...
Рейтинг: 0 / 0
Заполнение данных за два года помесячно
    #39471886
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валеркато что доктор прописал!!!!
Спасибо огромнейшее
я привел как пример, мож так и не надо делать

я б вычислил 24значения (в переменные, или в массив не столь важно)
и менял данные одним
update t set p01=v1,p02=v2 ... p24=v24 where ...

.....
stax
...
Рейтинг: 0 / 0
Заполнение данных за два года помесячно
    #39471924
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стас,

А чего не пивотом, раз ограниченное множество столбцов?
...
Рейтинг: 0 / 0
Заполнение данных за два года помесячно
    #39471958
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envСтас,

А чего не пивотом, раз ограниченное множество столбцов?

не умею я update пивотом

....
stax
...
Рейтинг: 0 / 0
Заполнение данных за два года помесячно
    #39472168
Валерка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..я б вычислил 24значения (в переменные, или в массив не столь важно)
и менял данные одним
update t set p01=v1,p02=v2 ... p24=v24 where ...

Это первое, что пришло в голову. Но как-то не красиво, нудно...
Сегодня с execute immediate всё сделал буквально минут за 15 минут. Так что еще раз спасибо...
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Заполнение данных за два года помесячно
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]