Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / помогите пжл с функцией / 25 сообщений из 26, страница 1 из 2
31.01.2017, 11:19
    #39395247
maxwait
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите пжл с функцией
подскажите пожалуйста, можно ли в функции сделать удаление записей а затем инсерт
Код: 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.
CREATE OR REPLACE FUNCTION XXI.get_tab_ptf (dateOtch IN Date)
 RETURN t_tf_tab PIPELINED AS
               
    BEGIN
      /* Удалить все записи
      BEGIN
         DELETE FROM table3;
       END;  
       */
     FOR i IN (
             SELECT c.ID, p.date_begin , p.date_end , round(MONTHS_BETWEEN(trunc(p.Date_End), trunc(p.Date_begin))) mm
                 from table1 c
                 join table2 p on p.Contract_Id = c.id
                 where p.date_begin <= dateOtch and (c.date_close > dateOtch or c.date_close is null)
     )
     LOOP
       /* Вставить записи...
       Insert into table3 (Id, date_degin, date_end, month) values (i.id, i.date_begin, i.date_end, i.mm)
       */
       pipe row (t_tf_row(i.id, i.date_begin,i.date_end,i.mm));
     END LOOP;
     RETURN;

    END;



Заранее спасибо!
...
Рейтинг: 0 / 0
31.01.2017, 11:26
    #39395257
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите пжл с функцией
maxwait,

а как она должна функционировать для нескольких одновременно работающих пользователей
...
Рейтинг: 0 / 0
31.01.2017, 11:28
    #39395263
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите пжл с функцией
maxwaitможно ли Сага о X, Y и Z...
...
Рейтинг: 0 / 0
31.01.2017, 11:31
    #39395267
maxwait
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите пжл с функцией
andreymx,

блин, не подумал, но можно добавить сессию. но с этим функционалом будет работать один человек, так что думаю будет все хорошо. но для начала у меня возникла такая надобность удалять и вставлять записи в функции, возможно ли такое?
...
Рейтинг: 0 / 0
31.01.2017, 11:40
    #39395276
maxwait
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите пжл с функцией
Elic,

прочитал Сагу о XYZ ), да понимаю что я новичок, возможно потом пойму, что сотворил нечто, и будут меня проклинать. Может потом найду способ, наберусь опыта и переделаю по правильному, но на данный момент я вижу только такой выход.
...
Рейтинг: 0 / 0
31.01.2017, 11:41
    #39395277
помогите пжл с функцией
maxwaitудалять записи в функции

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
create table test1 as select 1 id from dual;

select count(*) from test1;

create or replace function xz return number
as
  l_num number := 1;
begin
  delete from test1;
  commit;
  
  return l_num;
end;
/

declare
  l_xz number;
begin
  l_xz := xz;
end;
/

select count(*) from test1;



да.
...
Рейтинг: 0 / 0
31.01.2017, 11:42
    #39395279
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите пжл с функцией
maxwaitпрочитал Сагу о XYZ ), да понимаю что я новичок,Ты ничего не понял.
...
Рейтинг: 0 / 0
31.01.2017, 11:51
    #39395300
maxwait
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите пжл с функцией
Elic,

т.е. в функции insert и delete from table занятие подобного рода - это кощунство ?
...
Рейтинг: 0 / 0
31.01.2017, 11:56
    #39395312
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите пжл с функцией
maxwaitт.е. в функции insert и delete from table занятие подобного рода - это кощунство ?В табличной функции - да. По неопытности ты секретную задачу делаешь через ж.
...
Рейтинг: 0 / 0
31.01.2017, 12:19
    #39395334
maxwait
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите пжл с функцией
Elic,

Хорошо, можешь тогда еще подсказать вот функция
Код: 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.
CREATE OR REPLACE FUNCTION XXI.get_tab_ptf (dateOtch IN Date)
 RETURN t_tf_tab PIPELINED AS
 ret t_tf_row;      
         
    BEGIN

     FOR i IN (
             SELECT c.ID, p.date_begin , p.date_end , round(MONTHS_BETWEEN(trunc(p.Date_End), trunc(p.Date_begin))) mm
                 from table1 c
                 join table2 p on p.Contract_Id = c.id
                 where p.date_begin <= dateOtch and (c.date_close > dateOtch or c.date_close is null)
                       and c.ID = 4343
     /*Результат этого запроса
     1, 01.01.2017 , 26.03.2017, 3
     */
     )
     LOOP
     FOR q IN 0 .. i.mm
       LOOP
            /*если вывести так  pipe row*/
           pipe row (XXI.t_tf_row(i.id, i.date_begin,i.date_end, q)
           /*получаю такой результат
           1, 01.01.2017, 26.03.2017 , 1 
           1, 01.01.2017, 26.03.2017 , 2
           1, 01.01.2017, 26.03.2017 , 3
           , подскажите как сделать такой вид, через курсор как-то, добавить нужно одно поле еще последний день месяца?
           1, 01.01.2017, 26.03.2017 , 0 , 31.01.2017
           1, 01.01.2017, 26.03.2017 , 1 , 28.02.2017 
           1, 01.01.2017, 26.03.2017 , 2 , 31.03.2017
           чтобы получилось так...
         pipe row (XXI.t_tf_row(i.id, i.date_begin,i.date_end, q,/* и + последний день месяца*/ ));          
*/
       END LOOP;  
       
--       pipe row (XXI.t_tf_row(i.id, i.date_begin,i.date_end,q));
       
     END LOOP;
     RETURN;

    END;



заранее спасибо!
...
Рейтинг: 0 / 0
31.01.2017, 12:28
    #39395344
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите пжл с функцией
...
Рейтинг: 0 / 0
31.01.2017, 12:33
    #39395355
maxwait
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите пжл с функцией
123йй,

Ну что вот как-то так)) нибось скоро меня тут забанят))
...
Рейтинг: 0 / 0
31.01.2017, 12:36
    #39395359
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите пжл с функцией
maxwaitНу что вот как-то так)) нибось скоро меня тут забанят))
Ф. М. Достоевский ..... 1868 год
нажми на ссылку в предыдущем посте, там твое решение.
...
Рейтинг: 0 / 0
31.01.2017, 12:45
    #39395369
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите пжл с функцией
maxwaitХорошо, можешь тогда еще подсказать вот функцияЛамерам нельзя лесть в табличные функции, не освоив базис.
...
Рейтинг: 0 / 0
31.01.2017, 12:52
    #39395375
maxwait
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите пжл с функцией
Спасибо ребят) вот такое чудо получилось, прошу сильно не пинать)

Код: 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.
CREATE OR REPLACE FUNCTION XXI.get_tab_ptf (dateOtch IN Date)
 RETURN t_tf_tab PIPELINED AS
   ret t_tf_row;      
   v_Id Numeric;
   v_Date_begin Date;
   v_Date_end Date;
   v_LastWorkDateMonth Date;
     
    BEGIN
    

     FOR i IN (
             SELECT c.ID, p.date_begin , p.date_end , round(MONTHS_BETWEEN(trunc(p.Date_End), trunc(p.Date_begin))) mm
                 from table1 c
                 join table2 p on p.Contract_Id = c.id
                 where p.date_begin <= dateOtch and (c.date_close > dateOtch or c.date_close is null)
                       and c.ID = 4343
     )
     LOOP
     FOR q IN 0 .. i.mm
       LOOP
          
     
           SELECT c.ID, p.date_begin , p.date_end 
                  , case when trunc(Last_Day(ADD_MONTHS(p.date_begin,q))) <= p.date_end
                                 then trunc(Last_Day(ADD_MONTHS(p.date_begin,q)))
                      else trunc(p.date_end) end
           INTO v_Id, v_Date_begin, v_Date_end, v_LastWorkDateMonth
           from table1 c
           join table2 p on p.Contract_Id = c.id
           where p.date_begin <= dateOtch and (c.date_close > dateOtch or c.date_close is null)
                 and c.ID = 4343;
           
         pipe row (XXI.t_tf_row(v_Id, v_Date_begin,v_Date_end, q, v_LastWorkDateMonth));
          

       END LOOP;  
       
--       pipe row (XXI.t_tf_row(i.id, i.date_begin,i.date_end,q));
       
     END LOOP;
     RETURN;

    END;



буду дальше извращаться))
...
Рейтинг: 0 / 0
31.01.2017, 13:23
    #39395424
Glays
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите пжл с функцией
maxwait, пожалуйста, остановись! И сделай это в один селект.
...
Рейтинг: 0 / 0
31.01.2017, 13:48
    #39395455
помогите пжл с функцией
авторЛамерам нельзя лесть в табличные функции, не освоив базис.

Акела промахнулся.
...
Рейтинг: 0 / 0
31.01.2017, 14:47
    #39395522
maxwait
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите пжл с функцией
Glays,

Конечно, я потом постараюсь отрефакторить запрос, но пока сделаю как представляю, просто я с ораклом знаком 4-е недели) и мне сложновато без базиса как сказал Elic, но я постараюсь прислушиваться к умным людям, и с каждым разом постараюсь задавать все менее глупых вопросов.
Извините если шо)
...
Рейтинг: 0 / 0
31.01.2017, 15:03
    #39395533
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите пжл с функцией
maxwaitпросто я с ораклом знаком 4-е неделиЗабудь на полгодика про pipelined.
...
Рейтинг: 0 / 0
31.01.2017, 15:49
    #39395586
maxwait
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите пжл с функцией
Elic,

так работа то сама не сделается, отчет же сам не напишется, а пользователи попрошайничают отчет. Вот и приходится говнокодить.
...
Рейтинг: 0 / 0
31.01.2017, 17:18
    #39395708
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите пжл с функцией
maxwait,

ты с T-SQL пришел?
такое ощущение, что ты T-SQL-времянки пытаешься пристроить
...
Рейтинг: 0 / 0
01.02.2017, 10:49
    #39396118
maxwait
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите пжл с функцией
andreymx,

Да именно с него, с T-SQL ))
...
Рейтинг: 0 / 0
01.02.2017, 10:51
    #39396119
maxwait
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите пжл с функцией
как там все просто написал селект, надо тебе данные сохранить для будущих расчетов, создал временную табличку запихнул туда результат селекта, и потом дальше работай с ним. а тут суть немного походу отличается, вот и кавыряюсь пока что как свинья в цитрусовых)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
22.12.2018, 16:34
    #39751665
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите пжл с функцией
maxwaitСпасибо ребят) вот такое чудо получилось, прошу сильно не пинать)
Это "чудо":
- многократно делает лишнюю работу.
- не требует pipelined.

Способов размножить записи много.
Полагаю, для решения Вашей задачи вполне подойдет, к примеру, recursive-subquery-factoring
...
Рейтинг: 0 / 0
22.12.2018, 16:38
    #39751668
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите пжл с функцией
andrey_anonymous,

Уже празднуешь или так слегка на некрофилию потянуло?

SY.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / помогите пжл с функцией / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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