powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Function
20 сообщений из 20, страница 1 из 1
Function
    #39572749
Foxey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Столкнулся с функциями, в общих случаях в них разобрался, но существует вопрос
У меня идет 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
Function
    #39572757
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
Function
    #39572767
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FoxeyЕсли нет указателя IDшника
что это? где это? о чём ты?
...
Рейтинг: 0 / 0
Function
    #39572800
Foxey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Function
    #39572809
Фотография Rinka777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxey,

в EXCEPTION можно вызвать функцию, которая и обработает ваш group_type. Функцию это, конечно, надо написать.
если я правильно поняла вашу хитрую мысль
...
Рейтинг: 0 / 0
Function
    #39572812
merch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Function
    #39572813
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxeyобщее исключениеЧудак, исключение - это exception.
...
Рейтинг: 0 / 0
Function
    #39572825
Foxey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rinka777,

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

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

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

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

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

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

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

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

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

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

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

Foxey,

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

Общие предикаты в where? Или что?
...
Рейтинг: 0 / 0
Function
    #39572896
Foxey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Function
    #39572994
Foxeyпридется для каждого курсораТы в этой теме уже написал шесть сообщений. Может быть было проще условие вставить в каждый курсор и не ипать окружающим остатки мозга.
...
Рейтинг: 0 / 0
Function
    #39573269
Foxey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select в каждом селекте,

оно и стоит. Я спрашиваю, возможно вынести его за каждый курсор и убрать тем самым добрую половину строчек?
...
Рейтинг: 0 / 0
Function
    #39573466
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Function
    #39573469
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxey,

Почему это не одно и то же, что и вызов твоей функции в рамках каждого select подумаешь самостоятельно.
...
Рейтинг: 0 / 0
Function
    #39573544
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Function
    #39573553
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
20 сообщений из 20, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Function
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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