Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
SQL, PL/SQL, T-SQL: запросы, DML DDL операторы, пакеты, процедуры, функции, триггеры и последовательности.
  • Страница:
  • 1
  • 2

ТЕМА: Выполнение оператора DML в Oracle

Выполнение оператора DML в Oracle 23 июль 2011 07:48 #2823

  • Rita
  • Rita аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 48
  • Спасибо получено: 0
Подскажите, можно ли каким-либо способом определить вернул ли SELECT null или заполненную строку? И можно ли как-то сделать примерно следующее:
if insert = true then
commit;
else
...
end if;
т.е. если все выполнилось без ошибок - то commit, а иначе др. действия???

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

Re: Выполнение оператора DML в Oracle 23 июль 2011 08:06 #2824

begin
...
insert into ... (... ) select ... ;
if sql%rowcount>0 then
commit;
else
..;
end if;
...
end;

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

Re: Выполнение оператора DML в Oracle 23 июль 2011 08:08 #2825

  • Pond
  • Pond аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 47
  • Спасибо получено: 0
Несовсе понятен вопрос.
Тебе не это ужно
declare

col1_v my_tab.col1%TYPE;

begin

select col1 into col1_v from my_tab where col2=2;



if col1_v is null then 

   --some code


else 

  --some code


end if; 

end;

А насчет успешной транзакции, если она успешна то все ок, иначе получаем сообщение об ошибке

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

Re: Выполнение оператора DML в Oracle 23 июль 2011 08:08 #2826

  • Rita
  • Rita аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 48
  • Спасибо получено: 0
Вопрос подробнее:
перед insert надо провести проверку насчет того, не пытается ли пользователь добавить дублированную запись!

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

Re: Выполнение оператора DML в Oracle 23 июль 2011 08:09 #2827

  • Pond
  • Pond аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 47
  • Спасибо получено: 0
Ясно ты пишешь:
begin
Insert Into ....
Values....
Exception
when DUP_VAL_ON_INDEX
Then
Begin
........
End;
end;

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

Re: Выполнение оператора DML в Oracle 23 июль 2011 08:23 #2828

Сформулируй задачу, что ты хочешь? Проверить да дубликат можно как минимум 2-мя способами:
begin

  update my_table set ... where id = :id;

  if sql%rowcout = 0 then

    insert into ...

  end if; 

end;

/

При наличии immediate-ограничения уникальности:
begin

  insert into ...

exception 

  when dup_val_on_index then

    update my_table set ... where id = :id;

end;

/

В 9i появилось выражение MERGE, это уже 3-й способ:

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

  • Страница:
  • 1
  • 2