powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Help В триггере ошибка
9 сообщений из 9, страница 1 из 1
Help В триггере ошибка
    #32099582
Getlin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BEGIN
IF EXISTS
( SELECT
ID
FROM
inserted
WHERE
(Condition = 2)
AND (Category = 2) )
THEN
sp_UpdateBaseSalary(0);
END IF;

IF EXISTS
(SELECT
ID
FROM
inserted
WHERE
(Condition = 2)
AND (Category = 1) )
THEN
sp_ModifyTotalTariffRate(0);
END IF;
END;

Почему и в одном и во втором EXISTS появляется ошибка
PLS-00204: функция или псевдо-столбец 'EXISTS' могут быть использованы только внутри оператора SQL
...
Рейтинг: 0 / 0
Help В триггере ошибка
    #32099625
олег1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
обычай такой. не используют так exists().
может так?

for rec in (select ID
from inserted
where (Condition = 2)
and (category = 2))
loop
sp_UpdateBaseSalary(0);
exit;
end loop;
...
Рейтинг: 0 / 0
Help В триггере ошибка
    #32099656
Getlin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что значит rec
...
Рейтинг: 0 / 0
Help В триггере ошибка
    #32099662
олег1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rec - переменная типа %ROWTYPE записи, возвращаемой select'ом.
её не надо описывать в declare
...
Рейтинг: 0 / 0
Help В триггере ошибка
    #32099673
Getlin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ни черта не получается.
...
Рейтинг: 0 / 0
Help В триггере ошибка
    #32099694
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Оракле нельзя просто так написать if exist, хотя, на мой взгляд, жаль, мне такая конструкция нравится. Раз уж переползаешь с Sybase или MSSQL, можешь сделать так:
Код: plaintext
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.
declare
  v_id inserted.id%type;
begin
  select count (id)
  into   v_id
  from   inserted
  where   1  =  1 
  and    Condition =  2 
  and    category =  2 ;

  if v_id >  0  then
    sp_UpdateBaseSalary ( 0 );
  end if;

  v_id :=  0 ;

  select count (id)
  into   v_id
  from   inserted
  where   1  =  1 
  and    Condition =  2 
  and    category =  1 ;

  if v_id >  0  then
    sp_ModifyTotalTariffRate ( 0 );
  end if;
end;
...
Рейтинг: 0 / 0
Help В триггере ошибка
    #32099714
Alexandr Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если хош вообще без exception-ов типа NO_DATA_FOUND, то
можно

select sp_UpdateBaseSalary(0)
from dual
where
EXISTS
( SELECT
ID
FROM
inserted
WHERE
(Condition = 2)
AND (Category = 2) )
...
Рейтинг: 0 / 0
Help В триггере ошибка
    #32099721
Getlin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А в Oracle есть такое понятие INSERTED как SQL Server
...
Рейтинг: 0 / 0
Help В триггере ошибка
    #32099754
Alexandr Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
триггерный предикат есть - INSERTING
P.S. А в вопросе inserted - это какой-то иной объект, а не таблица?
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Help В триггере ошибка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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