Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Если отсутствует значение в таблице, то вывести ошибку. / 9 сообщений из 9, страница 1 из 1
02.12.2021, 19:04
    #40116801
PanjoRS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если отсутствует значение в таблице, то вывести ошибку.
Приветствую.
Никак не могу сообразить как сделать
К примеру кто-то удалил из базы значение 7. При данном запросе хочу это увидеть.

Код: sql
1.
2.
3.
select * from products
where (product_group = 2 and product_name = 3 )
and (doc = 4 or doc = 5 or doc = 6 or doc = 7 or doc = 8 or doc = 9)



В голове есть типа IF NOT EXIST THEN но как правильно писать...
Есть идеи?
...
Рейтинг: 0 / 0
02.12.2021, 19:25
    #40116805
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если отсутствует значение в таблице, то вывести ошибку.
В PL/SQL

Код: plsql
1.
2.
3.
4.
5.
6.
begin
   select ... into ...
   from products where /* product_group = 2 and product_name = 3 and */ doc=7;
exception when NO_DATA_FOUND then
   raise_application_error (-20001, 'Не найдены продукты /*из групп 2 и 3, */doc = 7'); 
end;



В SQL

Код: plsql
1.
select count(1) from products where /* product_group = 2 and product_name = 3 and */ doc=7;




Код: plsql
1.
2.
3.
4.
select *
  from products
where ...
and not exists (select 1 from products p join products on (p.product_group = products.product_group и пр. условия join) and doc = 7);
...
Рейтинг: 0 / 0
02.12.2021, 19:27
    #40116808
Anton_Demin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если отсутствует значение в таблице, то вывести ошибку.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with products as (
select level as doc from dual
connect by level < 14)
,doc_nums as (
select doc from (select level as doc from dual connect by level < 20) t
where mod(doc,3) = 0)
select d.doc
  from doc_nums d
  left join products p on d.doc = p.doc
where p.doc is null

PanjoRS,
...
Рейтинг: 0 / 0
02.12.2021, 23:18
    #40116872
PanjoRS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если отсутствует значение в таблице, то вывести ошибку.
Что-то понятнее не стало (
...
Рейтинг: 0 / 0
03.12.2021, 00:07
    #40116881
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если отсутствует значение в таблице, то вывести ошибку.
PanjoRS
Приветствую.
Никак не могу сообразить как сделать
К примеру кто-то удалил из базы значение 7. При данном запросе хочу это увидеть.

Код: sql
1.
2.
3.
select * from products
where (product_group = 2 and product_name = 3 )
and (doc = 4 or doc = 5 or doc = 6 or doc = 7 or doc = 8 or doc = 9)




В голове есть типа IF NOT EXIST THEN но как правильно писать...
Есть идеи?
куда вы хотите вывести ошибку?
...
Рейтинг: 0 / 0
03.12.2021, 09:16
    #40116933
Павел Воронцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если отсутствует значение в таблице, то вывести ошибку.
PanjoRS
Приветствую.
Никак не могу сообразить как сделать
К примеру кто-то удалил из базы значение 7. При данном запросе хочу это увидеть.

Код: sql
1.
2.
3.
select * from products
where (product_group = 2 and product_name = 3 )
and (doc = 4 or doc = 5 or doc = 6 or doc = 7 or doc = 8 or doc = 9)




В голове есть типа IF NOT EXIST THEN но как правильно писать...
Есть идеи?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select doc
from (select 4 from dual
union all
select 5 from dual
union all
select 6 from dual
union all
select 7 from dual
union all
select 8 from dual
union all
select 9 from dual) a
minus
select doc from products
where (product_group = 2 and product_name = 3 )
and doc in (4,5,6,7,8,9)
...
Рейтинг: 0 / 0
03.12.2021, 09:48
    #40116948
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если отсутствует значение в таблице, то вывести ошибку.
PanjoRS,
если Вы ищите "дырку" в номерации то самое простое lag/lead

Код: 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.
SQL> ed
Wrote file afiedt.buf

  1  with t as (
  2  select 4 doc from dual
  3  union all
  4  select 5 from dual
  5  union all
  6  select 6 from dual
  7  --union all
  8  --select 7 from dual
  9  union all
 10  select 8 from dual
 11  union all
 12  select 9 from dual)
 13  ,tt as (
 14    select t.*
 15     ,lead(doc,1,doc+1) over (order by doc) le
 16    from t
 17    where doc between 4 and 9)
 18* select * from tt where  le<>doc+1
SQL> /

       DOC         LE
---------- ----------
         6          8

SQL>



.....
stax
...
Рейтинг: 0 / 0
03.12.2021, 13:40
    #40117023
PanjoRS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если отсутствует значение в таблице, то вывести ошибку.
....
...
Рейтинг: 0 / 0
03.12.2021, 13:42
    #40117024
PanjoRS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если отсутствует значение в таблице, то вывести ошибку.
Павел Воронцов

Код: plsql
1.
2.
3.
4.
5.
6.
7.
select doc
from (select 4 from dual
union all
select 5 from dual
union all
select 6 from dual
union all...



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


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