Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 17.11.2014
Сообщений: 53
1

Запрос в триггере

21.12.2016, 15:42. Показов 1838. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть триггер, в теле триггера присутствует запрос. Как правильно его вставить, чтоб триггер создавался без ошибок?
Oracle 11 SQL Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CREATE OR REPLACE TRIGGER NDB_TR_MMAIL_PAY_UP_REF
  BEFORE INSERT ON PAYORDER
  REFERENCING OLD AS OLD NEW AS NEW
  FOR EACH ROW
  DECLARE
  newusercode VARCHAR2(10);
BEGIN
    IF :NEW.INOPERATION = 1622 THEN
        :NEW.REF_ := 'MMail';
        --Ниже определяем и вставляем код юзера относительно сессии
         
       SELECT newusercode INTO xu$id FROM X$USERS 
                            WHERE xu$novellname  = (SELECT
                                         UPPER (osuser) 
                                         FROM v$session
                                         WHERE USER# =( SELECT UID FROM dual)
                                         AND status = 'ACTIVE'
                                         AND osuser <> 'oracle')
                            AND xu$flags = '1';
         :NEW.USERCODE : = 'newusercode'
    END IF;
END NDB_TR_MMAIL_PAY_UP_REF;
Исправьте, что не так, пожалуйста.
Нужное значение xu$id
Сам запрос корректный
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.12.2016, 15:42
Ответы с готовыми решениями:

Запрос в триггере
Добрый день! Пришлось столкнуться с Oracle, но я начинающий разработчик и прошу строго не судить мой код. При создании документа в...

Написать запрос в триггере
привет, всем активным участникам этого форума. помогите, пожалуйста, написать запрос на SQL. создать триггер Update, котрый работал...

Ошибка в триггере
CREATE OR REPLACE TRIGGER TR BEFORE INSERT ON BUS FOR EACH ROW DECLARE avgAMT NUMBER := 0; BEGIN SELECT AVG(AMT)...

4
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
21.12.2016, 16:30 2
Цитата Сообщение от Shtokola Посмотреть сообщение
чтоб триггер создавался без ошибок
Для начала неплохо бы огласить ошибки.
0
0 / 0 / 0
Регистрация: 17.11.2014
Сообщений: 53
21.12.2016, 19:59  [ТС] 3
ORA-24344: компиляция завершилась с ошибками
16/24 PLS-00103: Encountered the symbol ":" when expecting one of the following:
:= . ( @ % ; indicator
Так, отступление: В конце строки :NEW.USERCODE : = 'newusercode', точка с запятой стоит...

Добавлено через 40 минут
Oracle 11 SQL Скопировано
1
:NEW.USERCODE := 'newusercode';
поправил это место, был пробел..
Стала другая ошибка:
17:21:26 ORA-24344: компиляция завершилась с ошибками
17:21:26 8/32 PLS-00201: identifier 'XU$ID' must be declared
17:21:26 8/38 PL/SQL: ORA-00904: : недопустимый идентификатор
17:21:26 8/8 PL/SQL: SQL Statement ignored

Добавлено через 2 часа 37 минут
Oracle 11 SQL Скопировано
1
SELECT newusercode INTO xu$id FROM X$USERS
Похоже разобрался... Нужно newusercod и xu$id поменять местами...завтра проверяю.
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
22.12.2016, 10:14 4
Цитата Сообщение от Shtokola Посмотреть сообщение
:NEW.USERCODE := 'newusercode';
Кстати, тоже странная строка. Зачем в поле записывать такой литерал ('newusercode')?
0
0 / 0 / 0
Регистрация: 17.11.2014
Сообщений: 53
22.12.2016, 10:47  [ТС] 5
Рабочий триггер. все поправил.
Grossmeister, на счет вашего последнего сообщения - это тоже была моя ошибка.

Oracle 11 SQL Скопировано
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
CREATE OR REPLACE TRIGGER NDB_TR_MMAIL_PAY_UP_REF
  BEFORE INSERT ON PAYORDER
  REFERENCING OLD AS OLD NEW AS NEW
  FOR EACH ROW
  DECLARE
  newusercode NUMBER;
BEGIN
    IF :NEW.INOPERATION = 1622 THEN
        :NEW.REF_ := 'MMail';
        --Ниже определяем и вставляем код юзера относительно сессии
         
       SELECT xu$id INTO newusercode FROM X$USERS 
                            WHERE xu$novellname  = (SELECT
                                         UPPER (osuser) 
                                         FROM v$session
                                         WHERE USER# =( SELECT UID FROM dual)
                                         AND status = 'ACTIVE'
                                         AND osuser <> 'oracle')
                            AND xu$flags = '1';
         IF newusercode IS NOT NULL THEN                   
             :NEW.USERCODE := newusercode;
         END IF;
    END IF;
END NDB_TR_MMAIL_PAY_UP_REF;
/
ALTER TRIGGER NDB_TR_MMAIL_PAY_UP_REF ENABLE;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.12.2016, 10:47
Помогаю со студенческими работами здесь

Подзапрос в триггере
CREATE OR REPLACE TRIGGER order_info_insert BEFORE INSERT ON RESULTS FOR EACH ROW BEGIN IF :new.ATTENDANCE &lt; (SELECT CAPACITY...

Ошибка в триггере
Есть такой вот триггер: CREATE TRIGGER LOGPROGRAMM AFTER INSERT OR UPDATE OR DELETE ON table test_table BEGIN IF...

Ошибка в триггере
В форме, при нажатии checkbox данные должны скопироваться в с одного поля в другое. Однако при проверке значения checkbox на истину,...

Как в триггере создать пользователя БД?
Здравствуйте! Вводная: После добавлении в некоторую таблицу нового человека необходимо назначить его пользователем бд и какие нибудь...

Ошибка в триггере Unknown Command
Такой вопрос: я создал триггер, но этот триггер компилируется и выскакивает такая ошибка Trigger SIGNER_ID_BIR compiled. Error...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Фишки Kotlin, которые все любят
Javaican 18.03.2025
Помню, как скептически относился к появлению "ещё одного языка для JVM" — мол, зачем нам что-то новое, когда есть Java? Но первый же проект на Kotlin заставил меня пересмотреть свое мнение. Код стал. . .
Списки и кортежи в Python: различия, особенности, применение
py-thonny 18.03.2025
Если вы когда-нибудь писали код на Python, то наверняка сталкивались с конструкциями вида или ('имя', 25, 'инженер'). Это и есть списки и кортежи — последовательности, хранящие упорядоченные наборы. . .
Интеграция JavaScript в Haskell
golander 18.03.2025
Ключевая особенность нового JS-бэкенда GHC — возможность создавать колбэки из JavaScript в Haskell-код. Это открывает дорогу разработке полноценных браузерных приложений, позволяя реагировать на. . .
Циклы for в Python
py-thonny 17.03.2025
Существует множество ситуаций, когда нам нужно выполнить одно и то же действие несколько раз. Цикл for в Python — настоящий рабочий конь для большинства программистов. Если вам нужно пройтись по всем. . .
Предсказание ветвлений - путь к высокопроизводи­тельному C++
NullReferenced 17.03.2025
В высокопроизводительном программировании на C++ каждый такт процессора на счету. Когда речь заходит о разработке систем с низкой задержкой — будь то высокочастотная торговля, обработка потоковых. . .
Паттерн CQRS в C#
UnmanagedCoder 17.03.2025
Создание сложных корпоративных приложений часто требует нестандартных подходов к архитектуре. Один из таких подходов — паттерн CQRS (Command Query Responsibility Segregation), предлагающий простую,. . .
Паттерн Цепочка ответственности в C#
UnmanagedCoder 17.03.2025
Цепочка ответственности — это поведенческий паттерн проектирования, который позволяет передавать запросы последовательно по цепочке потенциальных обработчиков, пока один из них не обработает запрос. . . .
Создаем микросервисы с NestJS, TCP и Typescript
run.dev 17.03.2025
NestJS — фреймворк, который значительно упрощает создание серверных приложений на Node. js. Его прелесть в том, что он комбинирует концепции ООП, функционального программирования и предлагает. . .
Гексагональная архитектура со Spring Boot
Javaican 17.03.2025
Если вы когда-нибудь сталкивались с ситуацией, когда внесение простых изменений в базу данных или пользовательский интерфейс заставляло вас переписывать весь код, то вы точно оцените элегантность. . .
Позиционировани­е Kafka Consumer и Seek-операции
Javaican 17.03.2025
Что же такое Consumer Seek в Kafka? По сути, это API-метод, который позволяет программно указать, с какой позиции (offset) Consumer должен начать или продолжить чтение данных из партиции. Без этого. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер