Логические триггеры что это?
Триггер — простейшее последовательностное устройство, которое может находиться в одном из двух возможных состояний и переходить из одного состояния в другое под воздействием входных сигналов. Триггер является базовым элементом последовательностных логических устройств. Входы триггера разделяют на информационные и управляющие (вспомогательные). Это разделение в значительной степени условно. Информационные входы используются для управления состоянием триггера. Управляющие входы обычно используются для предварительной установки триггера в некоторое состояние и для синхронизации.
Васильев Дмитрий Петрович
Профессор электротехники СПбГПУ
Задать вопрос
Триггеры могут иметь 2 выхода: прямой Q и инверсный Q.
Триггеры классифицируют по различным признакам, поэтому существует достаточно большое число классификаций. К сожалению, эти классификации не образуют стройной системы, но инженеру необходимо их знать.
Классификация триггеров
- по способу приема информации;
- по принципу построения;
- по функциональным возможностям.
Асинхронный триггер
Асинхронный триггер — изменяет свое состояние непосредственно в момент появления соответствующего информационного сигнала.
Васильев Дмитрий Петрович
Профессор электротехники СПбГПУ
Синхронные триггеры — реагируют на информационные сигналы только при наличии соответствующего сигнала на так называемом входе синхронизации C (от англ. clock). Этот вход также обозначают терминами «строб», «такт».
Синхронные триггеры
Синхронные триггеры в свою очередь подразделяют на триггеры со статическим (статические) и динамическим (динамические) управлением по входу синхронизации C. Статические триггеры воспринимают информационные сигналы при подаче на вход C логической единицы (прямой вход) или логического нуля (инверсный вход).
Динамические триггеры воспринимают информационные сигналы при изменении (перепаде) сигнала на входе C от 0 к 1 (прямой динамический С-вход) или от 1 к 0 (инверсный динамический С-вход).
Статические триггеры
Статические триггеры в свою очередь подразделяют на одноступенчатые (однотактные) и двухступенчатые (двухтактные). В одноступенчатом триггере имеется одна ступень запоминания информации, а в двухступенчатом — две такие ступени. Вначале информация записывается в первую ступень, а затем переписывается во вторую и появляется на выходе. Двухступенчатый триггер обозначают через ТТ.
ЦП Автоматизированные системы управления и промышленная безопасность
Триггер – простейшее последовательностное устройство, которое может длительно находиться в одном из нескольких возможных устойчивых состояний и переходить из одного в другое под воздействием входных сигналов. По способу работы с сигналами различают синхронные, асинхронные и смешанные триггерные схемы. Асинхронный триггер изменяет своё состояние непосредственно в момент появления соответствующего информационного сигнала. Синхронные триггеры реагируют на информационные сигналы только при наличии соответствующего сигнала на так называемом входе синхронизации С (от англ. clock). Этот вход также обозначают терминами «строб», «такт». Синхронные триггеры в свою очередь подразделяют на триггеры со статическим (статические) и динамическим (динамические) управлением по входу синхронизации С. RS-триггер или SR-триггер — триггер, который сохраняет своё предыдущее состояние при нулевых входах, и меняет своё выходное состояние при подаче на один из его входов единицы. При подаче единицы на вход S (от английского англ. Set — установить) выходное состояние становится равным логической единице. А при подаче единицы на вход R (от английского англ. Reset — сбросить) выходное состояние становится равным логическому нулю. Если RS-триггер синхронный, то состояние его входов учитывается только в момент тактирования, например по переднему фронту импульса. Состояние, при котором на оба входа R и S одновременно поданы логические единицы является запрещённым. Так, например, схема RS-триггера изображённая на рисунке, при подаче на оба инверсных входа логического нуля перейдёт в состояние, когда на обоих выходах будут единицы, что не соответствует логике выхода триггера, поскольку инверсный выход будет равен неинверсному Q , т.е..
S R Q(t) Q(t+1) 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 0 1 0 0 1 1 0 1 1 1 1 0 * 1 1 1 * RS-триггер используется для создания сигнала с положительным и отрицательным фронтами, отдельно управляемыми посредством стробов, разнесённых во времени. JK-триггер работает также как RS-триггер, с одним лишь исключением: при подаче логической единицы на оба входа J и K состояние выхода триггера изменяется на противоположное. Вход J (от англ. Jump — прыжок) аналогичен входу S у RS-триггера. Вход K (от англ. Kill — убить) аналогичен входу R у RS-триггера. При подаче единицы на вход J и нуля на вход K выходное состояние триггера становится равным логической единице. А при подаче единицы на вход K и нуля на вход J выходное состояние триггера становиться равным логическому нулю. JK-триггер в отличие от RS-триггера не имеет запрещённых состояний на основных входах, однако это никак не помогает при нарушении правил разработки логических схем. На практике применяются только синхронные JK-триггер, то есть состояния основных входов J и K учитываются только в момент тактирования, например по положительному фронту импульса на входе синхронизации. J K Q(t) Q(t+1) 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 0 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 0 На базе JK-триггера возможно построить D-триггер или Т-триггер. Как можно видеть в таблице истинности JK-триггера, он переходит в инверсное состояние каждый раз при одновременной подаче на входы J и K логической 1. Это свойство позволяет создать на базе JK-триггера Т-триггер, объединив входы J и К[4]. D-триггер (D от англ. delay — задержка) — запоминает состояние входа и выдаёт его на выход. D-триггеры имеют, как минимум, два входа: информационный D и синхронизации С. Сохранение информации в D-триггерах происходит в момент прихода активного фронта на вход С. Так как информация на выходе остаётся неизменной до прихода очередного импульса синхронизации, D-триггер называют также триггером с запоминанием информации или триггером-защёлкой. Рассуждая чисто теоретически, D-триггер можно образовать из любых RS- или JK-триггеров, если на их входы одновременно подавать взаимно инверсные сигналы.
D Q(t) Q(t+1) 0 0 0 0 1 0 1 0 1 1 1 1 D-триггер в основном используется для реализации защёлки. Так, например, для снятия 32 бит информации с параллельной шины, берут 32 D-триггера и объединяют их входы синхронизации для управления записью информации в защёлку, а 32 D входа подсоединяют к шине. Т-триггер по каждому такту изменяет своё логическое состояние на противоположное при единице на входе Т, и не изменяет выходное состояние при нуле на входе T. Т-триггер часто называют счётным триггером. Т-триггер может строиться как на JK, так и на D-триггерах. Как можно видеть в таблице истинности JK-триггера, он переходит в инверсное состояние каждый раз при одновременной подаче на входы J и K логической 1. Это свойство позволяет создать на базе JK-триггера Т-триггер, объединяя входы J и К. Наличие в D-триггере динамического С входа позволяет получить на его основе T-триггер. При этом вход D соединяется с инверсным выходом, а на вход С подаются счётные импульсы. В результате триггер при каждом счётном импульсе запоминает значение , то есть будет переключаться в противоположное состояние.
T Q(t) Q(t+1) 0 0 0 0 1 1 1 0 1 1 1 0 Т-триггер часто применяют для понижения частоты в 2 раза, при этом на Т вход подают единицу, а на С — сигнал с частотой, которая будет поделена.
< Предыдущая | Следующая > |
Обозначение входов триггеров
Входы триггеров обычно обозначают следующим образом:
S — вход для установки в состояние «1»;
R — вход для установки в состояние «0»;
J — вход для установки в состояние «1» в универсальном триггере;
К — вход для установки в состояние «0» в универсальном триггере;
Т — счетный (общий) вход;
D — вход для установки в состояние «1» или в состояние «0»;
V — дополнительный управляющий вход для разрешения приема информации (иногда используют букву Е вместо V).
Рассмотрим некоторые типы триггеров и их реализацию на логических элементах.
Триггеры уровня схемы (schema triggers)
- Срабатывает всегда, когда пользователь-владелец схемы запускает событие (выполняет операцию), на которую должен срабатывать триггер.
- В случае, если любой другой пользователь запускает процедуру/функцию, которая вызывается с правами создателя, и в этой процедуре/функции выполняется операция, на которую создан системный триггер – этот триггер сработает.
Пример триггера
CREATE OR REPLACE TRIGGER drop_trigger BEFORE DROP ON hr.SCHEMA BEGIN RAISE_APPLICATION_ERROR ( num => -20000, msg => ‘Cannot drop object’); END;
Асинхронный RS-триггер
Обратимся к асинхронному RS-триггеру, имеющему условное графическое обозначение, приведенное на рис. 3.54.
Триггер имеет два информационных входа: S (от англ. set) и R (от англ. reset).
Закон функционирования триггеров удобно описывать таблицей переходов, которую иногда также называют таблицей истинности (рис. 3.55). Через S’, R’, Q’ обозначены соответствующие логические сигналы, имеющие место в некоторый момент времени t, а через Qt + 1 — выходной сигнал в следующий момент времени t+1.
Комбинацию входных сигналов S’ = l, R’ =1 часто называют запрещенной, так как после нее триггер оказывается в состоянии (1 или 0), предсказать которое заранее невозможно. Подобных ситуаций нужно избегать.
Рассматриваемый триггер может быть реализован на двух элементах ИЛИ-НЕ (рис. 3.56).
Необходимо убедиться, что эта схема функционирует в полном соответствии с приведенной выше таблицей переходов.
Микросхема К564ТР2 содержит 4 асинхронных RS-триггера и один управляющий вход (рис. 3.57).
Абрамян Евгений Павлович
Доцент кафедры электротехники СПбГПУ
При подаче на вход V низкого уровня выходы триггеров отключаются от выводов микросхем и переходят в третье так называемое высокоимпедансное состояние. При подаче на вход V логического сигнала «1» триггеры работают в соответствии с вышеприведенной таблицей переходов.
В асинхронном RS-триггере на элементах И-НЕ переключение производится логическим «0», подаваемым на вход R или S, т. е. реализуется обратная рассмотренной ранее таблица переходов (рис. 3.58). Запрещенная комбинация соответствует логическим «0» на обоих входах.
Краткие теоретические сведения
Триггеры предназначены для запоминания двоичной информации. Использование триггеров позволяет реализовывать устройства оперативной памяти (то есть памяти, информация в которой хранится только на время вычислений).
Однако триггеры могут использоваться и для построения некоторых цифровых устройств с памятью, таких как счётчики, преобразователи последовательного кода в параллельный или цифровые линии задержки.
RS-триггер
Основным триггером, на котором базируются все остальные триггеры является RS-триггер. RS-триггер имеет два логических входа:
- R – установка 0 (от слова reset);
- S – установка 1 (от слова set).
RS-триггер имеет два выхода:
- Q – прямой;
- Q- обратный (инверсный).
Состояние триггера определяется состоянием прямого выхода. Простейший RS-триггер состоит из двух логических элементов, охваченных перекрёстной положительной обратной связью.
Рассмотрим работу триггера:
Пусть R=0, S=1. Нижний логический элемент выполняет логическую функцию ИЛИ-НЕ, т.е. 1 на любом его входе приводит к тому, что на его выходе будет логический ноль Q=0. На выходе Q будет 1 (Q=1), т.к. на оба входа верхнего элемента поданы нули (один ноль – со входа R, другой – с выхода ). Триггер находится в единичном состоянии. Если теперь убрать сигнал установки (R=0, S=0), на выходе ситуация не изменится, т.к. несмотря на то, что на нижний вход нижнего логического элемента будет поступать 0, на его верхний вход поступает 1 с выхода верхнего логического элемента.
Будет интересно➡ Как устроен однополупериодный выпрямитель и где применяется
Триггер будет находиться в единичном состоянии, пока на вход R не поступит сигнал сброса. Пусть теперь R=1, S=0. Тогда Q=0, а =1. Триггер переключился в “0”. Если после этого убрать сигнал сброса (R=0, S=0), то все равно триггер не изменит своего состояния. Для описания работы триггера используют таблицу состояний (переходов). Обозначим:
- Q(t) – состояние триггера до поступления управляющих сигналов (изменения на входах R и S);
- Q(t+1) – состояние триггера после изменения на входах R и S.
Таблица переходов RS триггера в базисе ИЛИ-НЕ
R | S | Q(t) | Q(t+1) | Пояснения |
Режим хранения информации R=S=0 | ||||
1 | 1 | |||
1 | 1 | Режим установки единицы S=1 | ||
1 | 1 | 1 | ||
1 | Режим установки нуля R=1 | |||
1 | 1 | |||
1 | 1 | * | R=S=1 запрещённая комбинация | |
1 | 1 | 1 | * |
RS-триггер можно построить и на элементах “И-НЕ” (рисунок 2.2).
Входы R и S инверсные (активный уровень “0”). Переход (переключение) этого триггера из одного состояния в другое происходит при установке на одном из входов “0”. Комбинация R=S=0 является запрещённой.
Таблица переходов RS триггера в базисе “2И-НЕ”
R | S | Q(t) | Q(t+1) | Пояснения |
* | R=S=0 запрещённая комбинация | |||
1 | * | |||
1 | Режим установки нуля R=0 | |||
1 | 1 | |||
1 | 1 | Режим установки единицы S=0 | ||
1 | 1 | 1 | ||
1 | 1 | Режим хранения информации R=S=1 | ||
1 | 1 | 1 | 1 |
Синхронный RS-триггер
Схема RS-триггера позволяет запоминать состояние логической схемы, но так как при изменении входных сигналов может возникать переходный процесс (в цифровых схемах этот процесс называется “опасные гонки”), то запоминать состояния логической схемы нужно только в определённые моменты времени, когда все переходные процессы закончены, и сигнал на выходе комбинационной схемы соответствует выполняемой ею функции. Это означает, что большинство цифровых схем требуют сигнала синхронизации (тактового сигнала).
Все переходные процессы в комбинационной логической схеме должны закончиться за время периода синхросигнала, подаваемого на входы триггеров. Триггеры, запоминающие входные сигналы только в момент времени, определяемый сигналом синхронизации, называются синхронными. Принципиальная схема синхронного RS триггера приведена.
Таблица переходов синхронного RS-триггера
R | S | C | Q(t) | Q(t+1) | Пояснения |
1 | Режим хранения информации R = S = 0 | ||||
1 | 1 | 1 | |||
1 | 1 | 1 | Режим установки единицы S =1 | ||
1 | 1 | 1 | 1 | ||
1 | 1 | Режим установки нуля R=1 | |||
1 | 1 | 1 | |||
1 | 1 | 1 | * | R = S = 1 запрещённая комбинация | |
1 | 1 | 1 | 1 | * |
В таблице 2.3. под сигналом С подразумевается синхроимпульс. Без синхроимпульса синхронный RS триггер сохраняет своё состояние.
Синхронный RS-триггер
Рассмотрим синхронный RS-триггер (рис. 3.59).
Если на входе С — логический «0», то и на выходе верхнего входного элемента «И-НЕ», и на выходе нижнего будет логическая «1». А это, как отмечалось выше, обеспечивает хранение информации.
Васильев Дмитрий Петрович
Профессор электротехники СПбГПУ
Задать вопрос
Таким образом, если на входе С — логический «0», то воздействие на входы R, S не приводит к изменению состояния триггера.
Если же на вход синхронизации С подана логическая единица, то схема реагирует на входные сигналы точно так же, как и рассмотренная ранее (рис. 3.56).
Логические вентили(логические элементы).
Процессы, необходимые для функционирования любых технологических устройств ( в т. ч. и ПК) можно реализовать с помощью ограниченного набора логических элементов.
Буфер.
Буфер, представляет из себя усилитель тока, служащий для согласования различных логических вентилей, в особенности имеющих в своей основе разную элементную базу (ттл или КМОП).
Инвертор.
Элемент, служащий для инвертирования поступающих сигналов — логическая еденица превращается в ноль, и наоборот.
Логическая схема И.
И — элемент логического умножения. Еденица (высокий уровень напряжения) на выходе, появляется только в случае присутствия едениц, на обоих входах, одновременно.
Пример применения элемента И в реальном техническом устройстве: По тех. заданию, механический пресс должен срабатывать, только при одновременном нажатии двух кнопок, разнесенных на некоторое расстояние. Смысл тех. задания заключается в том, что бы обе руки оператора были заняты на момент хода пресса, что исключило бы возможность случайного травмирования конечности. Это может быть реализовано как раз, с помощью логического элемента И.
Логическая схема И — НЕ.
И-НЕ — наиболее часто используемый элемент. Он состоит из логических вентилей И и НЕ, подключенных последовательно.
Логическая схема ИЛИ.
ИЛИ — схема логического сложения. Логическая еденица на выходе, появляется в случае присутствия высокого уровня(еденицы) на любом из входов.
Логическая схема ИЛИ — НЕ.
ИЛИ — НЕ состоит из логических элементов ИЛИ и НЕ, подключеных последовательно. Соответственно, НЕ инвертирует значения на выходе ИЛИ.
Логическая схема исключающее ИЛИ.
Этот вентиль выдает на выходе логическую еденицу, если на одном из входов — еденица, а на другом, ноль. Если на входах присутствуют одинаковые значения — на выходе ноль.
Триггер типа MS
Рассмотрим принцип построения двухступенчатого триггера, который называют также триггером типа MS (от англ. master, slave, что переводят обычно как «ведущий» и «ведомый»). Его упрощенная структурная схема приведена на рис. 3.60. В схеме имеются два одноступенчатых триггера (ведущий М и ведомый S) и два электронных ключа (Кл1 и Кл2).
Временная диаграмма сигнала синхронизации, поясняющая работу триггера, приведена на рис. 3.61.
Рассмотрим ряд временных интервалов указанной диаграммы:
t < ta — ведущий триггер отключен от информационных входов, ведомый триггер подключен к ведущему;
ta < t < tb — ведущий триггер отключен от информационных входов, ведомый триггер отключен от ведущего;
tb < t < tc — ведущий триггер подключен к информационным входам, ведомый триггер отключен от ведущего. В ведущий триггер записывается информация, поданная на входы;
tc < t < td — ведущий триггер отключен от информационных входов, ведомый триггер отключен от ведущего;
td < t — ведущий триггер отключен от информационных входов, ведомый триггер подключен к ведущему, информация из ведущего триггера переписывается в ведомый. Это происходит сразу после момента времени td и означает, что фактически двухступенчатый триггер срабатывает при изменении сигнала синхронизации от 1 к 0. При этом выходные сигналы определяются теми входными информационными сигналами, которые имели место непосредственно перед отрицательным фронтом сигнала синхронизации.
Ошибка мутирования таблицы ORA-04091
Если в триггере уровня строки попытаться получить или изменить данные в целевой таблицы, то Oracle не позволит это сделать и выкинет ошибку ORA-04091 Таблица TABLE_TEST изменяется, триггер/функция может не заметить это. Для обхода данной проблемы используются следующие приемы:
- использовать триггеры уровня операции
- автономная транзакция в триггере
- использовать сторонние структуры (коллекции уровня пакета)
- использовать COMPOUND TRIGGER
- изменение самого алгоритма с выносом функционала из триггера
Конструкция system_trigger:
Такие триггеры относятся или к схеме, или ко всей базе данных.
Есть несколько вариантов, в какой момент времени срабатывает системный триггер:
- До того, как будет выполнена операция (на которую срабатывает триггер)
- После того, как будет выполнена операция (на которую срабатывает триггер)
- Вместо выполнения оператора Create
JK-триггер
Рассмотрим JK-триггер (от англ. jump иkeep), отличающийся от рассмотренного RS-триггера тем, что появление на обоих информационных входах (J и К) логических единиц (для прямых входов) приводит к изменению состояния триггера. Такая комбинация сигналов для JK-триггера не является запрещенной.
В остальном JK-триггер подобен RS-триггеру, причем роль входа S играет вход J, а роль входа R — вход К.
JK-триггеры реализуют в виде триггеров типа MS или в виде динамических триггеров (т. е. JK-триггеры являются синхронными).
На рис. 3.62 приведено условное графическое обозначение двухступенчатого JK-триггера.
Обратимся к динамическим триггерам. Для них характерно блокирование информационных входов в тот момент, когда полученная информация передается на выход. Нужно отметить, что в отношении реакции на входные сигналы динамический триггер, срабатывающий при изменении сигнала на входе С от 1 к 0, подобен рассмотренному двухступенчатому триггеру, хотя они отличаются внутренним устройством.
Для прямого динамического С-входа используют обозначения, приведенные на рис. 3.63, а, а для инверсного динамического С-входа, используют обозначения, приведенные на рис. 3.63, б.
Псевдозаписи
Существуют псевдозаписи, позволяющие обратиться к полям изменяемой записи и получить значения полей до изменения и значения полей после изменения. Это записи old и new. С помощью конструкции Referencing
можно изменить их имена. Структура этих записей tablename%rowtype. Эти записи есть только у триггеров row level или у compound триггеров (с секциями уровня записи).
Операция срабатывания триггера | OLD.column | NEW.column |
Insert | NULL | Новое значение |
Update | Старое значение | Новое значение |
Delete | Старое значение | NULL |
Restrictions:
- С псевдозаписями запрещены операции уровня всей записи ( :new = NULL;)
- Нельзя изменять значения полей записи old
- Если триггер срабатывает на delete, нельзя изменить значения полей записи new
- В триггере after нельзя изменить значения полей записи new
D-триггер
Рассмотрим D-триггер (от англ. delay), повторяющий на своем выходе состояние входа. Рассуждая чисто теоретически, D-триггер можно образовать из любых RS- или JK-триггеров, если на их входы одновременно подавать взаимно инверсные сигналы (рис. 3.64).
Абрамян Евгений Павлович
Доцент кафедры электротехники СПбГПУ
Хранение информации в D-триггерах обеспечивается за счет синхронизации, поэтому все реальные D-триггеры имеют два входа: информационный D и синхронизации С. В этом триггере сигнал на входе по сигналу синхронизации записывается и передается на выход. Так как информация на выходе остается неизменной до прихода очередного импульса синхронизации, D-триггер называют также триггером с запоминанием информации или триггером-защелкой.
Условное графическое обозначение D-триггера приведено на рис. 3.65.
Принцип работы электронного триггера.
Слово триггер(trigger), по английски означает — спусковой крючок. Функция триггера — мгновенное переключение из одного устойчивого состояние в другое, под действием внешнего, управляющего фактора. Существуют пневматические, механические и релейные схемы триггеров. Но электронные схемы, по надежности и самое главное — быстродействию, безусловно,вне конкуренции. Электронная схема триггера состоит из двух усилительных каскадов и по своей сути, является одной из разновидностий мультивибратора.
Выход каждого из каскадов подключен к входу другого, но не через конденсаторы, как в обычном симметричном мультивибраторе а через резисторы. Номиналы этих резисторов подобраны так, что каскад с полностью открытым транзистором, уверенно запирает транзистор другого каскада. Если подать на триггер питающее напряжение, то оба каскада начинают «бороться» между собой, пытаясь закрыть друг-друга.
Как бы не были транзисторы близки по характеристикам, один из них(присвоим ему номер1) обязательно окажется «сильнее» и закроет другой (для удобства обозначим его как номер 2) Все происходит очень быстро, выглядит так, что транзистор 1 мгновенно оказывается открытым, а другой (2) закрытым. В таком состоянии триггер может находиться очень долго. Можно назвать его — 1-м устойчивым состоянием.
Если подать на вход закрытого каскада(2) имульс напряжения, достаточный, что бы его открыть на короткое время, то открывшись он «запрет» каскад 1, пребывающий до этого момента в открытом состоянии. Закрывшись, каскад 1 перестает запирать каскад 2, и тот так и останется открытым. Таким образом, каскады поменяются местами, триггер окажется во 2-м устойчивом состоянии.
В таком состоянии он может находиться очень долго, если не подать открывающий импульс, на закрытый каскад 1. Каскад 1 открываясь, запрет каскад 2 и триггер вернется в первоначальное состояние(1). Получается, что наш триггер имеет два устойчивых состояния и два управляющих входа, подав на которые импульсы достаточной амплитуды, можно эти состояния менять.
Атрибуты системных триггеров
Атрибут | Возвращаемое значение и тип |
ora_client_ip_address | Varchar2 ip-адрес клиента Пример: IF (ora_sysevent = ‘LOGON’) THEN v_addr := ora_client_ip_address; END IF; |
ora_database_name | Varchar2(50) имя базы данных Пример: v_db_name := ora_database_name; |
ora_des_encrypted_password | Varchar2 зашифрованный по стандарту DES пароль пользователя, который создается или изменяется Пример: IF (ora_dict_obj_type = ‘USER’) THEN INSERT INTO event_table VALUES (ora_des_encrypted_password); END IF; |
ora_dict_obj_name | Varchar2(30) имя объекта, над которым совершается операция DDL Пример: INSERT INTO event_table VALUES (‘Changed object is ‘ || ora_dict_obj_name); |
ora_dict_obj_name_list ( name_list OUT ora_name_list_t ) | Pls_integer количество изменненых командой объектов Name_list – список измененных командой объектов Пример: IF (ora_sysevent=’ASSOCIATE STATISTICS’) THEN number_modified := ora_dict_obj_name_list(name_list); END IF; |
ora_dict_obj_owner | Varchar2(30) владелец объекта, над которым совершается операция DDL Пример: INSERT INTO event_table VALUES (‘object owner is’ || ora_dict_obj_owner); |
ora_dict_obj_owner_list ( owner_list OUT ora_name_list_t ) | Pls_integer количество владельцев измененных командой объектов Owner_list – список владельцев изменных командой объектов Пример: IF (ora_sysevent=’ASSOCIATE STATISTICS’) THEN number_modified := ora_dict_obj_name_list(owner_list); END IF; |
ora_dict_obj_type | Varchar2(20) тип объекта, над которым совершается операция ddl Пример: INSERT INTO event_table VALUES (‘This object is a ‘ || ora_dict_obj_type); |
ora_grantee ( user_list OUT ora_name_list_t ) | Pls_integer количество пользователей, участвующих в операции grant User_list – список этих пользователей Пример: IF (ora_sysevent = ‘GRANT’) THEN number_of_grantees := ora_grantee(user_list); END IF; |
ora_instance_num | Number номер инстанса Пример: IF (ora_instance_num = 1) THEN INSERT INTO event_table VALUES (‘1’); END IF; |
ora_is_alter_column ( column_name IN VARCHAR2 ) | Boolean True, если указанное поле было изменено операцией alter. Иначе false Пример: IF (ora_sysevent = ‘ALTER’ AND ora_dict_obj_type = ‘TABLE’) THEN alter_column := ora_is_alter_column(‘C’); END IF; |
ora_is_creating_nested_table | Boolean true, если текущее событие – это создание nested table. Иначе false Пример: IF (ora_sysevent = ‘CREATE’ AND ora_dict_obj_type = ‘TABLE’ AND ora_is_creating_nested_table) THEN INSERT INTO event_table VALUES (‘A nested table is created’); END IF; |
ora_is_drop_column ( column_name IN VARCHAR2 ) | Boolean true, если указанное поле удалено. Иначе false Пример: IF (ora_sysevent = ‘ALTER’ AND ora_dict_obj_type = ‘TABLE’) THEN drop_column := ora_is_drop_column(‘C’); END IF; |
ora_is_servererror ( error_number IN VARCHAR2 ) | Boolean true, если сгенерированно исключение с номером error_number. Иначе false Пример: IF ora_is_servererror(error_number) THEN INSERT INTO event_table VALUES (‘Server error!!’); END IF; |
ora_login_user | Varchar2(30) имя текущего пользователя Пример: SELECT ora_login_user FROM DUAL; |
ora_partition_pos | Pls_integer в instead of trigger для create table позиция в тексте sql команды, где может быть вставлена конструкция partition Пример: — Retrieve ora_sql_txt into sql_text variable v_n := ora_partition_pos; v_new_stmt := SUBSTR(sql_text,1,v_n — 1) || ‘ ‘ || my_partition_clause || ‘ ‘ || SUBSTR(sql_text, v_n)); |
ora_privilege_list ( privilege_list OUT ora_name_list_t ) | Pls_integer количество привилегий, участвующее в операции grant или revoke Privilege_list – список этих привилегий Пример: IF (ora_sysevent = ‘GRANT’ OR ora_sysevent = ‘REVOKE’) THEN number_of_privileges := ora_privilege_list(privilege_list); END IF; |
ora_revokee ( user_list OUT ora_name_list_t ) | Pls_integer количество пользователей, участвующих в операции revoke User_list – список этих пользователей Пример: IF (ora_sysevent = ‘REVOKE’) THEN number_of_users := ora_revokee(user_list); END IF; |
ora_server_error ( position IN PLS_INTEGER ) | Number код ошибки в указанной позиции error stack, где 1 – это вершина стека Пример: INSERT INTO event_table VALUES (‘top stack error ‘ || ora_server_error(1)); |
ora_server_error_depth | Pls_integer количество сообщений об ошибка в error stack Пример: n := ora_server_error_depth; — Use n with functions such as ora_server_error |
ora_server_error_msg ( position IN PLS_INTEGER ) | Varchar2 сообщение об ошибке в указанном месте error stack Пример: INSERT INTO event_table VALUES (‘top stack error message’ || ora_server_error_msg(1)); |
ora_server_error_num_params ( position IN PLS_INTEGER ) | Pls_integer количество замещенных строк (с помощью формата %s) в указанной позиции error stack Пример: n := ora_server_error_num_params(1); |
ora_server_error_param ( position IN PLS_INTEGER, param IN PLS_INTEGER ) | Varchar2 замещенный текст в сообщении об ошибке в указанной позиции error stack (возвращается param по счету замещенный текст) Пример: — Second %s in «Expected %s, found %s»: param := ora_server_error_param(1,2); |
ora_sql_txt ( sql_text OUT ora_name_list_t ) | Pls_integer количество элементов в pl/sql коллекции sql_text. Сам параметр sql_text возвращает текст команды, на которую сработал триггер Пример: CREATE TABLE event_table (col VARCHAR2(2030)); DECLARE sql_text ora_name_list_t; n PLS_INTEGER; v_stmt VARCHAR2(2000); BEGIN n := ora_sql_txt(sql_text); FOR i IN 1..n LOOP v_stmt := v_stmt || sql_text(i); END LOOP; INSERT INTO event_table VALUES (‘text of triggering statement: ‘ || v_stmt); END; |
ora_sysevent | Varchar2(20) название команды, на которую срабатывает триггер Пример: INSERT INTO event_table VALUES (ora_sysevent); |
ora_with_grant_option | Boolean true, если привилегии выдаются with grant option. Иначе false. Пример: IF (ora_sysevent = ‘GRANT’ AND ora_with_grant_option = TRUE) THEN INSERT INTO event_table VALUES (‘with grant option’); END IF; |
ora_space_error_info ( error_number OUT NUMBER, error_type OUT VARCHAR2, object_owner OUT VARCHAR2, table_space_name OUT VARCHAR2, object_name OUT VARCHAR2, sub_object_name OUT VARCHAR2 ) | Boolean true, если ошибка возникает из-за нехватки места. В выходных параметрах информация об объекте. Пример: IF (ora_space_error_info ( eno,typ,owner,ts,obj,subobj) = TRUE) THEN DBMS_OUTPUT.PUT_LINE(‘The object ‘|| obj || ‘ owned by ‘ || owner || ‘ has run out of space.’); END IF; |