powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Условия в запросе....
13 сообщений из 13, страница 1 из 1
Условия в запросе....
    #32164134
D8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
D8
Гость
Задача: выполнить один из INSERT'ов, в зависимости от того, что вернет некий SELECT.
Как это можно реализовать в Oracle ?

Спасибо.

Очень начинающий.
...
Рейтинг: 0 / 0
Условия в запросе....
    #32164163
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
insert into <таблица> select .......
и пошло.
Вобщем пишешь запрос так что-бы он тебе возвращал то что надо.
...
Рейтинг: 0 / 0
Условия в запросе....
    #32164164
Фотография Eter Panji
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да,
читай доку
...
Рейтинг: 0 / 0
Условия в запросе....
    #32164179
D8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
D8
Гость
В зависимости от результата SELECT может и не нужно будет делать INSERT.
Ближе к жизни задача выглядит так:
В таблицу нужно добавить новую запись, только в том случае, если там такой записи нет. (структуру таблицы изменить нельзя).
...
Рейтинг: 0 / 0
Условия в запросе....
    #32164194
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если 9i то там есть команда merge (см. доку)
Если ниже, я думаю чистым SQL здесь не обойтись.
Хотя и insert into тоже можно использовать если есть PK.
В этом случае, если запись есть он просто ругнётся.
...
Рейтинг: 0 / 0
Условия в запросе....
    #32164195
D8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
D8
Гость
... можно ли в запросе "разветвлять" процесс с помошью какой-нибудь конструкции типа IF для решения ОПИСАННОЙ задачи?
...
Рейтинг: 0 / 0
Условия в запросе....
    #32164215
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можешь попробовать отчесь те записи, которые уже есть, наподобе:
Код: plaintext
1.
2.
3.
4.
5.
6.
insert into t1(id)
select t2.id 
from t2   
where not exists (
  select  1  from t1 where t2.id = t1.id
)


А сформулировать задачу ИМХО можно поконкретнее. Я, к примеру, подумал, что в одни записи надо вставлять в одну таблицу, а другие - в другую.
...
Рейтинг: 0 / 0
Условия в запросе....
    #32164216
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 D8:

>В таблицу нужно добавить новую запись, только в том случае, если там
>такой записи нет.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
INSERT
  INTO  your_table
  SELECT  list-of-values
    FROM  DUAL
  WHERE NOT EXISTS (
                    SELECT   1 
                      FROM  your_table
                      WHERE ...
                   )
/


SY
...
Рейтинг: 0 / 0
Условия в запросе....
    #32164334
D8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
D8
Гость
Спасибо.
Да, догадок по поводу неоговоренных условий много.... извините.
Вот как все на самом деле:
Oracle 8i.
Сам запрос формируется другой программой и выполняется с помощью
sqlplus user/passwd @file
Значения полей, в заполняемой записи формируются программой. Например такие строки я пишу из программы в указанный file:
INSERT INTO tabl (Field1_Name, Field2_Name) VALUES ('Field1_Value', 'Field2_Value');
commit;
exit;
Другими словами, добавляемых данных нет в других таблицах (создать временную, возможно, и нельзя, но может и получиться - попробую).
И вот сама проблемка: вышеуказанный INSERT нужно выполнять только если в таблице tabl нет записей, с Field2_Name='Field2_Value'.
Primary Key не поможет, так как принимать решение о добавлении нужно на основе не ключевых полей, PK инкрементируется при добавлении новых записей.
Вот я и не знаю:
1. Можно ли в запросах использовать IF (и где вообще допустим IF);
2. Возможно ли обойтись запросом или нужно что-то похитрее;
3. Какую тему в доках читать в первую очередь (в свете решения указанной проблемы).

Еще раз спасибо.
...
Рейтинг: 0 / 0
Условия в запросе....
    #32164340
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создай ограничение уникальности и немного измени запрос на добавление записи:

Код: plaintext
1.
alter table tabl add constraint ak_tabl_Field2_Name unique (Field2_Name);


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
begin
  INSERT INTO tabl (Field1_Name, Field2_Name) 
  VALUES ('Field1_Value', 'Field2_Value');
  commit;
exception 
  when dup_val_on_index then null;
end;
/
exit;
...
Рейтинг: 0 / 0
Условия в запросе....
    #32164734
D8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
D8
Гость
Спасибо всем за помощь !

Сделал так:

INSERT INTO tabl (Field1_Name, Field2_Name)
SELECT DISTINCT 'Field1_Value', 'Field2_Value' FROM tabl WHERE NOT EXISTS
(SELECT Field2_Name FROM tabl WHERE Field2_Name='Field2_Value');
...
Рейтинг: 0 / 0
Условия в запросе....
    #32164752
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to D8:

Ты выбрал не самый лучший способ. Зачем тебе производить такую дорогостоющую операцию:
"SELECT DISTINCT 'Field1_Value', 'Field2_Value' FROM tabl "
только для того что-бы вернуть нужные значения.

Тебе же SY показал как сделать:
Код: plaintext
1.
2.
3.
4.
5.
.........
  SELECT  'Field1_Value', 'Field2_Value' 
    FROM  DUAL
  WHERE NOT EXISTS (
.....................


Чуешь разницу?
...
Рейтинг: 0 / 0
Условия в запросе....
    #32164795
D8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
D8
Гость
Понятно.
Опять и еще раз спасибо.
Впредь постараюсь быть внимательней.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Условия в запросе....
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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