35.57. triggers#

35.57. triggers

35.57. triggers

Представление triggers содержит все триггеры, определенные в текущей базе данных на таблицы и представления, которые принадлежат текущему пользователю или для которых у него есть привилегии, отличные от SELECT.

Таблица 35.55. triggers Колонки

Тип столбца

Описание

trigger_catalog sql_identifier

Имя базы данных, содержащей триггер (всегда текущая база данных)

trigger_schema sql_identifier

Имя схемы, содержащей триггер

trigger_name sql_identifier

Имя триггера

event_manipulation character_data

Событие, которое вызывает триггер (INSERT, UPDATE или DELETE)

event_object_catalog sql_identifier

Имя базы данных, содержащей таблицу, на которой определен триггер (всегда текущая база данных)

event_object_schema sql_identifier

Имя схемы, содержащей таблицу, на которой определен триггер

event_object_table sql_identifier

Имя таблицы, на которой определен триггер

action_order cardinal_number

Порядок срабатывания триггеров на одной таблице с одним и тем же event_manipulation, action_timing и action_orientation. В Tantor SE триггеры срабатывают в порядке их имен, поэтому эта колонка отражает это.

action_condition character_data

WHEN условие триггера, null, если отсутствует (также null, если таблица не принадлежит в настоящее время активной роли)

action_statement character_data

Выполняемый оператор триггера (в настоящее время всегда EXECUTE FUNCTION function(...))

action_orientation character_data

Определяет, запускается ли триггер один раз для каждой обработанной строки или один раз для каждого оператора (ROW или STATEMENT)

action_timing character_data

Время, когда срабатывает триггер (BEFORE, AFTER или INSTEAD OF)

action_reference_old_table sql_identifier

Имя старой таблицы перехода или null, если таковой отсутствует

action_reference_new_table sql_identifier

Имя новой таблицы переходов, или null, если таковой нет

action_reference_old_row sql_identifier

Применяется к функциональности, недоступной в Tantor SE

action_reference_new_row sql_identifier

Применяется к функциональности, недоступной в Tantor SE

created time_stamp

Применяется к функциональности, недоступной в Tantor SE


Триггеры в Tantor SE имеют два несовместимости с SQL-стандартом, которые влияют на представление в информационной схеме. Во-первых, имена триггеров локальны для каждой таблицы в Tantor SE, а не являются независимыми объектами схемы. Поэтому в одной схеме могут быть определены дубликаты имен триггеров, при условии, что они принадлежат разным таблицам. (trigger_catalog и trigger_schema на самом деле относятся к таблице, на которой определен триггер). Во-вторых, в Tantor SE триггеры могут быть определены для срабатывания на несколько событий (например, ON INSERT OR UPDATE), в то время как SQL-стандарт разрешает только одно событие. Если триггер определен для срабатывания на несколько событий, он представлен в информационной схеме в виде нескольких строк, по одной для каждого типа события. В результате этих двух проблем первичным ключом представления triggers является (trigger_catalog, trigger_schema, event_object_table, trigger_name, event_manipulation), а не (trigger_catalog, trigger_schema, trigger_name), как это предусмотрено SQL-стандартом. Тем не менее, если вы определяете свои триггеры в соответствии с SQL-стандартом (уникальные имена триггеров в схеме и только один тип события на триггер), это не повлияет на вас.

Примечание

До Tantor SE9.1, столбцы этого представления action_timing, action_reference_old_table, action_reference_new_table, action_reference_old_row и action_reference_new_row назывались condition_timing, condition_reference_old_table, condition_reference_new_table, condition_reference_old_row и condition_reference_new_row соответственно. Так они назывались в стандарте SQL:1999. Новое название соответствует стандарту SQL:2003 и более поздним версиям.