powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / помогите пжл с функцией
26 сообщений из 26, показаны все 2 страниц
помогите пжл с функцией
    #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
помогите пжл с функцией
    #39395257
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxwait,

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

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

прочитал Сагу о XYZ ), да понимаю что я новичок, возможно потом пойму, что сотворил нечто, и будут меня проклинать. Может потом найду способ, наберусь опыта и переделаю по правильному, но на данный момент я вижу только такой выход.
...
Рейтинг: 0 / 0
помогите пжл с функцией
    #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
помогите пжл с функцией
    #39395279
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxwaitпрочитал Сагу о XYZ ), да понимаю что я новичок,Ты ничего не понял.
...
Рейтинг: 0 / 0
помогите пжл с функцией
    #39395300
maxwait
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

т.е. в функции insert и delete from table занятие подобного рода - это кощунство ?
...
Рейтинг: 0 / 0
помогите пжл с функцией
    #39395312
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxwaitт.е. в функции insert и delete from table занятие подобного рода - это кощунство ?В табличной функции - да. По неопытности ты секретную задачу делаешь через ж.
...
Рейтинг: 0 / 0
помогите пжл с функцией
    #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
помогите пжл с функцией
    #39395344
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
помогите пжл с функцией
    #39395355
maxwait
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123йй,

Ну что вот как-то так)) нибось скоро меня тут забанят))
...
Рейтинг: 0 / 0
помогите пжл с функцией
    #39395359
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxwaitНу что вот как-то так)) нибось скоро меня тут забанят))
Ф. М. Достоевский ..... 1868 год
нажми на ссылку в предыдущем посте, там твое решение.
...
Рейтинг: 0 / 0
помогите пжл с функцией
    #39395369
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxwaitХорошо, можешь тогда еще подсказать вот функцияЛамерам нельзя лесть в табличные функции, не освоив базис.
...
Рейтинг: 0 / 0
помогите пжл с функцией
    #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
помогите пжл с функцией
    #39395424
Glays
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxwait, пожалуйста, остановись! И сделай это в один селект.
...
Рейтинг: 0 / 0
помогите пжл с функцией
    #39395455
авторЛамерам нельзя лесть в табличные функции, не освоив базис.

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

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

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

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

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

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

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

SY.
...
Рейтинг: 0 / 0
помогите пжл с функцией
    #39751670
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYandrey_anonymous,
Уже празднуешь или так слегка на некрофилию потянуло?
SY.
Блин. Оно у меня с какой-то радости в [new] повылезало, на даты даже не посмотрел - сорри, удалите плиз.
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / помогите пжл с функцией
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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