powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Case or nvl2
21 сообщений из 21, страница 1 из 1
Case or nvl2
    #39572118
Foxey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Существует запрос
Код: plsql
1.
2.
select name from table_name_one q where
             (q.name in (select name from table_name_two id in ( select column_value from table (SHC_FLT_PKG.GET_groups_id())))) 



Он вытягивает значения, если в SHC_FLT_PKG.GET_groups_id(tt_varchar2(' ')) есть значение

Не могу заставить его показывать null, если значение в SHC_FLT_PKG не указано

Пытался с помощью nvl2 в коде

Код: plsql
1.
2.
select name from table_name_one q where
             (q.name in (select name from table_name_two id in ((select column_value from table (nvl2(SHC_FLT_PKG.GET_groups_id())), SHC_FLT_PKG.GET_groups_id(), SHC_FLT_PKG.GET_groups_id() is null ))))



Вылетает ошибка ORA - 00907 о несоответсвии колличества закрывающих\открывающих скобок и ставит флаг в

Код: plsql
1.
q.name in



Как фиксить? Или по-другому запрос составить? Подскажите, пожалуйста
...
Рейтинг: 0 / 0
Case or nvl2
    #39572124
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FoxeyНе могу заставить его показывать null, если значение в SHC_FLT_PKG не указано
Код: plsql
1.
right join dual

FoxeyКак фиксить?Отформатировать код по-человечески.
...
Рейтинг: 0 / 0
Case or nvl2
    #39572130
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxey,

Для начала приглядитесь к тексту ошибки

select name from table_name_one q where
(q.name in (select name from table_name_two id in ((select column_value from table (nvl2(SHC_FLT_PKG.GET_groups_id())), SHC_FLT_PKG.GET_groups_id(), SHC_FLT_PKG.GET_groups_id() is null ))))
...
Рейтинг: 0 / 0
Case or nvl2
    #39572133
Foxey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
шК0ДЕР,

Все равно выскакивает ora - 00907
...
Рейтинг: 0 / 0
Case or nvl2
    #39572138
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FoxeyшК0ДЕР,

Все равно выскакивает ora - 00907
Тогда, как в первом классе, на счетных палочках, посчитайте кол-во открывающихся скобок и закрывающихся))
Приведите их в соответствие
...
Рейтинг: 0 / 0
Case or nvl2
    #39572144
Foxey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я понимаю, что вы тут привыкли к троллингу, даже приведя(да-да, счетные палочки, календарь майя) выскакивает ошибка ORA - 00907
...
Рейтинг: 0 / 0
Case or nvl2
    #39572151
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FoxeyЯ понимаю, что вы тут привыкли к троллингу http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
Case or nvl2
    #39572154
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FoxeyЯ понимаю, что вы тут привыкли к троллингу, даже приведя(да-да, счетные палочки, календарь майя) выскакивает ошибка ORA - 00907

Это не троллинг, тебе выдано сообщение, явно указывающее ошибку, куда уже проще?
Конец рабочего дня, глаза иногда обманывают, не верь им, перепроверь :)
...
Рейтинг: 0 / 0
Case or nvl2
    #39572155
Foxey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,

Жду ссылку на "Давай я поищу в гугле за тебя"



Код: plsql
1.
2.
3.
select name from stg_hp_assignmentm1 where
            (q.name in (select name from table_one where id in (nvl2(select column_value from table(SHC_FLT_PKG.GET_column1()), SHC_FLT_PKG.GET_column1(), SHC_FLT_PKG.GET_column1() is null))))              
             



Вылетает ошибка ORA - 00936

Я не понимаю, где ошибка в запросе
Руководствуюсь http://oracleplsql.ru/nvl2-function.html
...
Рейтинг: 0 / 0
Case or nvl2
    #39572158
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxey,

Утро вечера мудреннее... лучше с утра займись

select name from stg_hp_assignmentm1 where
(q.name in (select name from table_one where id in (nvl2(select column_value from table(SHC_FLT_PKG.GET_column1()), SHC_FLT_PKG.GET_column1(), SHC_FLT_PKG.GET_column1() is null))))
...
Рейтинг: 0 / 0
Case or nvl2
    #39572179
join dual
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Foxey,

Не путай NULL значение и 0 строк.

Тебе ведь сразу же 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.
select rownum, column_value from table(sys.odcivarchar2list('раз', 'два'));

ROWNUM COLUMN_VALUE
------ ------------
     1 раз
     2 два
     
select rownum, column_value from table(sys.odcivarchar2list());

ROWNUM COLUMN_VALUE
------ ------------

select rownum, column_value from table(sys.odcivarchar2list()) right join dual on 1 = 1;

ROWNUM COLUMN_VALUE
------ ------------
     1 
     
select rownum, column_value from dual left join table(sys.odcivarchar2list()) on 1 = 1;

ROWNUM COLUMN_VALUE
------ ------------
     1 
...
Рейтинг: 0 / 0
Case or nvl2
    #39572180
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxey,

Ну и откуда нам знать что возвращает TABLE(SHC_FLT_PKG.GET_groups_id()) ? Да и что тебе даст этот NULL. Условие id IN (NULL) всегда вернет unknown.

SY.
...
Рейтинг: 0 / 0
Case or nvl2
    #39572187
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxey,

если SHC_FLT_PKG.GET_groups_id не вернула елементы, что выбироть из table_name_two?
Все id?

.....
stax
...
Рейтинг: 0 / 0
Case or nvl2
    #39572189
Foxey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил, но без right join dual
...
Рейтинг: 0 / 0
Case or nvl2
    #39572190
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
39.
40.
41.
42.
43.
44.
SQL> ed
Wrote file afiedt.buf

  1  select * from emp
  2  where deptno in (
  3     select deptno from dept d
  4          where d.deptno in
  5*             (select nvl(value(t),d.deptno) from dual,table(sys.odcinumberlist(10))(+) t ))
SQL> /

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7782 CLARK      MANAGER         7839 09.06.81       2450                    10
      7839 KING       PRESIDENT            17.11.81       5000                    10
      7934 MILLER     CLERK           7782 23.01.82       1300                    10

SQL> ed
Wrote file afiedt.buf

  1  select * from emp
  2  where deptno in (
  3     select deptno from dept d
  4          where d.deptno in
  5*             (select nvl(value(t),d.deptno) from dual,table(sys.odcinumberlist())(+) t ))
SQL> /

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7782 CLARK      MANAGER         7839 09.06.81       2450                    10
      7839 KING       PRESIDENT            17.11.81       5000                    10
      7934 MILLER     CLERK           7782 23.01.82       1300                    10
      7369 SMITH      CLERK           7902 17.12.80        800                    20
      7566 JONES      MANAGER         7839 02.04.81       2975                    20
      7788 SCOTT      ANALYST         7566 09.12.82       3000                    20
      7876 ADAMS      CLERK           7788 12.01.83       1100                    20
      7902 FORD       ANALYST         7566 03.12.81       3000                    20
      7499 ALLEN      SALESMAN        7698 20.02.81       1600        300         30
      7521 WARD       SALESMAN        7698 22.02.81       1250        500         30
      7654 MARTIN     SALESMAN        7698 28.09.81       1250       1400         30
      7698 BLAKE      MANAGER         7839 01.05.81       2850                    30
      7844 TURNER     SALESMAN        7698 08.09.81       1500                    30
      7900 JAMES      CLERK           7698 03.12.81        950                    30

14 rows selected.




.....
stax
...
Рейтинг: 0 / 0
Case or nvl2
    #39572194
Foxey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
(q.name in (select name from table_name_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)
...
Рейтинг: 0 / 0
Case or nvl2
    #39572197
Foxey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Моя ошибка была, изначально надо было писать целый код, а не кусок его
...
Рейтинг: 0 / 0
Case or nvl2
    #39572198
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxey,

ORA-01427: single-row subquery returns more than one row

....
stax
...
Рейтинг: 0 / 0
Case or nvl2
    #39572521
Foxey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

Полный код

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE OR REPLACE VIEW TABLE_OF_V AS
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)

             and
             (q.columnZ in (select name from table_three where id in( select column_value from table (SHC_FLT_PKG.column3())))
                   or (select column_value from table (SHC_FLT_PKG.column3()) where rownum = 1) is null)

             and
           (substr(columnY, 1, instr(columnY,'(',1,1)-2) in (select name from table_four where id in(select column_value from table (SHC_FLT_PKG.GET_column4())))
                      or (select column_value from table (SHC_FLT_PKG.GET_column4()) where rownum = 1) is null);



Смысл в том, что если в сет не установлено ничего, т.е. фактический NULL, то он возвращает все значения из таблицы
...
Рейтинг: 0 / 0
Case or nvl2
    #39572561
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxey,

я бы OR не пользовал

не знаю, но мож по факту OR и луче

.....
stax
...
Рейтинг: 0 / 0
Case or nvl2
    #39572581
Foxey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

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


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