Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Function / 20 сообщений из 20, страница 1 из 1
20.12.2017, 14:26
    #39572749
Foxey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Function
Столкнулся с функциями, в общих случаях в них разобрался, но существует вопрос
У меня идет 6 курсоров и из за выбранного груптайпа к ним обращается селект

Код: 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.
begin
    if (group_type = 1)
      then
                  for rec1 in c1 loop
                    pipe row(rec1);
                    end loop;
      elsif
         (group_type = 2)
          then
             for rec2 in c2 loop
                    pipe row(rec2);
                    end loop;
      elsif 
         (group_type = 3)
          then
             for rec3 in c3 loop
                    pipe row(rec3);
                    end loop;
     elsif
         (group_type = 4)
          then
             for rec4 in c4 loop
                    pipe row(rec4);
                    end loop;    

    elsif
         (group_type = 4)
          then
             for rec4 in c4 loop
                    pipe row(rec4);
                    end loop; 
   elsif
         (group_type = 4)
          then
             for rec4 in c4 loop
                    pipe row(rec4);
                    end loop;   
      end if;



Возможно ли для всех курсоров одновременно описать исключения?
Например
Если нет указателя IDшника считывать все ID и на основе следующих условий в селекте отсеивать ненужные? Или придется прописывать условия в каждый курсор?
...
Рейтинг: 0 / 0
20.12.2017, 14:36
    #39572757
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Function
http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
20.12.2017, 14:46
    #39572767
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Function
FoxeyЕсли нет указателя IDшника
что это? где это? о чём ты?
...
Рейтинг: 0 / 0
20.12.2017, 15:18
    #39572800
Foxey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Function
env,

В курсоре есть запрос

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
cursor c1 is 
       select
   to_char(c.day, 'dd.mm.yyyy') day
 , q.itid unit
 , count(q.id) cnt
 from cc_calendar c
left join cc_hp_inc_history q
on c.day = trunc(q.date1)

where c.day between shc_flt_pkg.GET_BEG_DATE and shc_flt_pkg.GET_END_DATE
and  q.rg in (select name rg from (select name from stg_hp_ASSIGNMENTM1 q 
                             where (q.name in (select column_value rg from table(work_groups)))
                            ))
                            
and state = 'Закрыт'
group by   c.day, q.itid
order by c.day



Так же существуют курсоры с2-с6
Нужно задать общее условие для всех курсоров. Смысл не в конкретике, а в общем описании проблемы.
Возможно ли в функции описать общее исключение для всех курсоров или это надо делать для каждого?
...
Рейтинг: 0 / 0
20.12.2017, 15:22
    #39572809
Rinka777
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Function
Foxey,

в EXCEPTION можно вызвать функцию, которая и обработает ваш group_type. Функцию это, конечно, надо написать.
если я правильно поняла вашу хитрую мысль
...
Рейтинг: 0 / 0
20.12.2017, 15:25
    #39572812
merch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Function
Foxey
Код: 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.
begin
    if (group_type = 1)
      then
                  for rec1 in c1 loop
                    pipe row(rec1);
                    end loop;
      elsif
         (group_type = 2)
          then
             for rec2 in c2 loop
                    pipe row(rec2);
                    end loop;
      elsif 
         (group_type = 3)
          then
             for rec3 in c3 loop
                    pipe row(rec3);
                    end loop;
     elsif
         (group_type = 4)
          then
             for rec4 in c4 loop
                    pipe row(rec4);
                    end loop;    

    elsif
         (group_type = 4)
          then
             for rec4 in c4 loop
                    pipe row(rec4);
                    end loop; 
   elsif
         (group_type = 4)
          then
             for rec4 in c4 loop
                    pipe row(rec4);
                    end loop;   
      end if;



Зачем 3 одинаковых elsif?
...
Рейтинг: 0 / 0
20.12.2017, 15:25
    #39572813
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Function
Foxeyобщее исключениеЧудак, исключение - это exception.
...
Рейтинг: 0 / 0
20.12.2017, 15:29
    #39572825
Foxey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Function
Rinka777,

функция написана, но действует не так как надо
При выборе одного значения, должен выстраиваться график
Однако он не выстраивается. Работает только если выбрать все значения для постройки графика

График строится в периуде, указанном мной
Разделения на 15 минут, сутки, неделя, месяц, год, декада
Даты ставлю так же, обозначая в
shc_flt_pkg.SET_BEG_DATE and shc_flt_pkg.SET_END_DATE

Необходимо создать условия, которые я описал выше.

---------------

Получается если после ретурна взять конструкцию
EXCEPTION
END

, то функция будет использовать исключения на все курсоры?
...
Рейтинг: 0 / 0
20.12.2017, 15:31
    #39572829
merch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Function
Foxey, у тебя Алекситимия.
...
Рейтинг: 0 / 0
20.12.2017, 15:38
    #39572843
Function
Foxey,

С твоими способностями изъясняться в программировании делать нечего. Но, если ничего не писать на форум, то никто и не узнает, кем ты пытаешься быть.
...
Рейтинг: 0 / 0
20.12.2017, 15:39
    #39572845
Foxey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Function
merch,

атрофированным эмоциональным состоянием и недостатком эмоций не страдаю.

Скорее я не могу четко обозначить проблему и записать вопрос
Быстро перескакиваю с темы на тему
Хомячки
И просто аморальный

Я и без вас это знаю
...
Рейтинг: 0 / 0
20.12.2017, 15:57
    #39572866
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Function
merch,

Скорее афазия или косноязычие.

Foxey,

Когда задаёте вопрос, посмотрите на него с точки зрения человека, который совершенно вне контекста вашей задачи и видит только написанное. Можно ли по написанному понять, что вы имеете в виду? Чего не хватает для создания контекста?
...
Рейтинг: 0 / 0
20.12.2017, 15:58
    #39572869
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Function
FoxeyНужно задать общее условие для всех курсоров
Какой смысл вкладывается в это понятие?

Общие предикаты в where? Или что?
...
Рейтинг: 0 / 0
20.12.2017, 16:28
    #39572896
Foxey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Function
env,

Есть 6 курсоров и 8 условий
Сейчас я для каждого курсора прописываю код
Например :

Код: plsql
1.
2.
(q.name in (select name from table_two where id in (select column_value from table (SHC_FLT_PKG.GET_column1())))
                   or (select column_value from table (SHC_FLT_PKG.GET_column1()) where rownum = 1) is null)



И так в каждом курсоре

Я хочу избавиться от строки
Код: plsql
1.
 or (select column_value from table (SHC_FLT_PKG.GET_column1()) where rownum = 1) is null)


В каждом курсоре и в самой функции, для всех курсоров, сделать эту самую строку условием.

Поясняю
Код: plsql
1.
2.
(q.name in (select name from table_two where id in (select column_value from table (SHC_FLT_PKG.GET_column1())))
                   or (select column_value from table (SHC_FLT_PKG.GET_column1()) where rownum = 1) is null)


Выбирает из table_two значения, которые содержатся в SHC_FLT_PKG.GET_column1(), если значение задано NULL, то он возвращает полностью таблицу table_two

В примере селекта

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
BEGIN
SHC_FLT_PKG.SET_column1(tt_varchar2(''));
SHC_FLT_PKG.SET_column2(tt_number(1,2,3,4,5,6));
END;


select q.name from table_one q where
           (q.name in (select name from table_two where id in (select column_value from table (SHC_FLT_PKG.GET_column1())))
                   or (select column_value from table (SHC_FLT_PKG.GET_column1()) where rownum = 1) is null)
             and
             (substr (columnX,0, 1) in (select column_value from table(SHC_FLT_PKG.column2()))
                   or (select column_value from table (SHC_FLT_PKG.column2()) where rownum = 1) is null)



Он вернет значения, из таблицы table_one, к которым подходит условие column2, при этом добавив соответствующие column1 из таблицы table_two

Без OR он требует полного соотвтетсия всех SHC_FLT_PKG в запросе, т.е.
Код: plsql
1.
2.
3.
4.
BEGIN
SHC_FLT_PKG.SET_column1(tt_varchar2('One, two, three, four, five, six'));
SHC_FLT_PKG.SET_column2(tt_number(1,2,3,4,5,6));
END;




Я хочу спросить, возможно ли для курсоров в функции, созданой в специальном PKG
Код: plsql
1.
2.
3.
function get_func_name(
      group_type   number
  ) return tt_unit_backlog pipelined is



Создать условия для каждого курсора отдельно, обращаясь при этом к ним при селекте, или придется для каждого курсора выставлять такие условия
...
Рейтинг: 0 / 0
20.12.2017, 18:38
    #39572994
Function
Foxeyпридется для каждого курсораТы в этой теме уже написал шесть сообщений. Может быть было проще условие вставить в каждый курсор и не ипать окружающим остатки мозга.
...
Рейтинг: 0 / 0
21.12.2017, 09:11
    #39573269
Foxey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Function
select в каждом селекте,

оно и стоит. Я спрашиваю, возможно вынести его за каждый курсор и убрать тем самым добрую половину строчек?
...
Рейтинг: 0 / 0
21.12.2017, 12:42
    #39573466
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Function
Foxey,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
set serveroutput on
declare 
p number := 0;
cursor c is select chr(ascii(dummy)+level-1) dummy from dual where dummy = 'Y' or p = 1 connect by level<3;
begin
  select count(*)+1 into p from dual where dummy = 'Y';--'X';
  for v in c loop
    dbms_output.put_line(v.dummy);
  end loop;
end;
/
...
Рейтинг: 0 / 0
21.12.2017, 12:44
    #39573469
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Function
Foxey,

Почему это не одно и то же, что и вызов твоей функции в рамках каждого select подумаешь самостоятельно.
...
Рейтинг: 0 / 0
21.12.2017, 13:30
    #39573544
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Function
Код: 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.
set scan on

create or replace procedure foxey as
begin
    for l_row in (select * from dual &&predicate) loop
        null;
    end loop;

    for l_row in (select * from dual &&predicate) loop
        null;
    end loop;
end;
/
Введите значение для predicate: where 1 = 0
прежний   3:     for l_row in (select * from dual &&predicate) loop
новый   3:     for l_row in (select * from dual where 1 = 0) loop
прежний   7:     for l_row in (select * from dual &&predicate) loop
новый   7:     for l_row in (select * from dual where 1 = 0) loop

Процедура создана.

select text
from user_source
where name = 'FOXEY'
order by line;

TEXT
----------------------------------------------------------------------
procedure foxey as
begin
    for l_row in (select * from dual where 1 = 0) loop
        null;
    end loop;

    for l_row in (select * from dual where 1 = 0) loop
        null;
    end loop;
end;

10 строк выбрано.
...
Рейтинг: 0 / 0
21.12.2017, 13:35
    #39573553
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Function
Foxeyenv,

Есть 6 курсоров и 8 условий
Сейчас я для каждого курсора прописываю код
Например :

Код: plsql
1.
2.
(q.name in (select name from table_two where id in (select column_value from table (SHC_FLT_PKG.GET_column1())))
                   or (select column_value from table (SHC_FLT_PKG.GET_column1()) where rownum = 1) is null)



И так в каждом курсоре

Я хочу избавиться от строки
Код: plsql
1.
 or (select column_value from table (SHC_FLT_PKG.GET_column1()) where rownum = 1) is null)




в предидущей теме Вам советовали решение без OR

Case or nvl2
21046371

Код: plsql
1.
2.
3.
(q.name in (select name from table_two where id in (select NVL(column_value,ID) 
from DUAL,table (SHC_FLT_PKG.GET_column1())(+) ))
)



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


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